S3 POST请求到S3并收到405响应

7

为了使用我的一个存储桶作为静态网站托管,我有以下 S3 的 CORS 配置:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
    </CORSRule>
</CORSConfiguration>

然后我有以下编辑重定向规则:
<RoutingRules>
    <RoutingRule>
    <Condition>
        <KeyPrefixEquals>abc</KeyPrefixEquals>
    </Condition>
    <Redirect>
        <HostName>myec2instance.com</HostName>
    </Redirect>
</RoutingRule>

我想做的是,当S3收到POST请求/abc时,将请求和请求体重定向到我的EC2实例。重定向规则有效(我可以通过将POST切换为GET请求来测试),但出于某种原因,当请求为POST时,S3返回HTTPResponse 405。有什么想法吗?


我能找到的关于重定向后出现此错误的参考资料似乎表明,如果您将重定向指向文件夹而不是文件,或者指向没有默认文档集的文件夹,则会发生此错误。它是其中之一吗? - user1832464
嗨@monkeymatrix,感谢您的回答!我的问题不是重定向操作(至少我认为不是)。对我来说,问题在于S3作为静态网站主机不允许我从网页内部的JavaScript发送HTTP POST请求。 我想要实现的是创建一个着陆页面,用户可以留下他们的联系方式,然后网页通过POST将其联系方式发送到S3,最后S3重定向到保存所发送JSON数据的EC2实例。 - user1126167
2个回答

13

这是否意味着您不能使用S3网站托管来转发POST请求? - Jake
@Jake - 正确...虽然我不确定为什么你想要“转发”(重定向?)一个POST,因为这意味着重新发送请求体到新位置,在浏览器端会耗费时间和带宽。你可能需要在这里创建一个新问题,描述你的用例和你试图解决的问题。即使存在匹配的重定向规则,对S3网站端点的POST请求也会遇到405 Method Not Allowed - Michael - sqlbot
谢谢Michael。我正在从托管在S3上的前端应用程序中访问后端REST API。我意识到正确的方法是通过CORS直接访问后端,而不需要重定向。 - Jake
您可以使用API网关和Lambda。 - zuyao88

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接