S3 向 S3 发出 POST 请求,响应为 405
Posted
技术标签:
【中文标题】S3 向 S3 发出 POST 请求,响应为 405【英文标题】:S3 POST request to S3 with response 405 【发布时间】:2015-04-20 00:56:56 【问题描述】:我有以下 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 接收到 /abc 的 POST 时将请求和请求正文重定向到我的 ec2 实例。重定向规则工作正常(我能够通过将 POST 切换为 GET 请求来测试这一点),但由于任何原因,当请求是 POST 时,S3 返回 HTTPResponse 405。任何想法为什么?
【问题讨论】:
我在重定向后可以找到的有关此错误的引用似乎表明,如果您重定向到文件夹而不是文件,或者重定向到没有默认文档集的文件夹,就会发生这种情况。是其中之一吗? 嗨@monkeymatrix 感谢您的回答!我的问题不是重定向操作(至少我是这么认为的)。对我来说,问题是 S3 作为静态网站主机不允许我从网页内的 javascript 发送 HTTP POST。我想要完成的是创建一个登录页面,用户可以在其中留下他们的联系方式,然后网页通过 POST 将他们的联系方式发送到 S3,最后 S3 重定向到保存发送的 json 数据的 ec2 实例。 【参考方案1】:这与 CORS 无关——它是 S3 本身。 S3 网站端点仅适用于GET
和HEAD
。在检查重定向规则之前,应拒绝任何其他内容。
网站端点
仅支持对对象的 GET 和 HEAD 请求。
——http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteEndpoints.html
【讨论】:
这是否意味着您不能使用 S3 网站托管来转发 POST 请求? @Jake - 正确......虽然我不确定你为什么要“转发”(重定向?)POST
,因为这意味着将请求正文重新发送到浏览器端的新位置、花费时间和带宽。您可能想在这里创建一个新问题,描述您的用例以及您要解决的问题。 POST
对 S3 网站端点的请求,即使存在匹配的重定向规则,也会遇到 405 Method Not Allowed
。
谢谢迈克尔。我正在从托管在 S3 上的前端应用程序中访问后端 REST API。我意识到正确的方法是直接使用 CORS 访问后端,而不需要重定向。
你可以使用API网关,Lambda。【参考方案2】:
如果你想使用POST
请求S3
,你需要在浏览器中使用root对象,通过创建POSTPolicy
来获取S3 authentication
您可以参考Browser-Based Upload using HTTP POST
【讨论】:
以上是关于S3 向 S3 发出 POST 请求,响应为 405的主要内容,如果未能解决你的问题,请参考以下文章
S3 REST API HEAD 请求上的 403 禁止错误
Python3 AWS Lambda-向需要VPN的域发出发布请求
向服务器发出 JSON POST 请求,接收二进制响应(Excel 文件),如何下载?
AWS S3 通过预签名 URL 上传返回 400 错误请求