1

第三方程序需要从我们的 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?

4

1 回答 1

0

S3 仅支持GETHEAD因此您无法发送POST请求(请参阅相关内容)。

您可以编写一个 lambda Edge 函数,在将请求 POST 方法发送到源 (s3) 之前将其替换为 GET。无需在本地下载文件。

于 2018-12-15T18:27:38.583 回答