【发布时间】:2019-05-16 14:40:23
【问题描述】:
第三方程序需要从我们的 CDN 访问静态文件。问题是,他们不是通过 GET 获取这些文件,而是通过 POST 发出此请求。
在测试这个POST => cdn.company.com/somefile 时,我得到-
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>MethodNotAllowed</Code>
<Message>The specified method is not allowed against this resource.</Message>
<Method>POST</Method>
<ResourceType>OBJECT</ResourceType>
</Error>
CloudFront 行为设置为支持所有方法-
并且CORS配置中包含POST方法-
<?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>2592000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
不确定还需要做什么。我的怀疑是 S3(正确)假设 POST 正在尝试将信息添加到存储桶,它应该只返回路径中的文件。 Cloudfront 到 s3 有可能吗?我是否需要将请求转发给将下载文件的 lambda?
【问题讨论】:
-
第三方程序坏了。他们确实需要为他们正在采取的行动使用正确动词,即
GET。您是否应该通过创建解决方法来为他们解决这个问题?可以说不是,但如果出于某种原因有必要,还有另一个问题将决定您的选择:对象有多大? -
我完全同意你的看法,迈克尔。问题是第三方程序是Apple。该对象压缩后约为 250kb
-
您确定这是对您要解决的问题的正确诊断吗?您能否提供更多上下文,也许是一些苹果文档的链接?我不想解决错误的问题。
-
developer.apple.com/library/archive/documentation/…。在“下载您的网站包”下 - 使用 POST 请求而不是 GET 请求。意味着推送包不能直接由 s3 服务
标签: amazon-web-services amazon-s3 aws-lambda amazon-cloudfront aws-lambda-edge