首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么CloudFront会根据Accept-Encoding来改变CORS报头响应?

为什么CloudFront会根据Accept-Encoding来改变CORS报头响应?
EN

Stack Overflow用户
提问于 2013-02-03 05:59:19
回答 3查看 7K关注 0票数 17

我正在尝试让CORS与亚马逊S3 + CloudFront一起正常工作。

在设置我的CORS配置后,它似乎工作正常:

代码语言:javascript
复制
$ curl -H "Origin: https://app.close.io" -I "https://d4389n07pf8cq.cloudfront.net/built/app.9e1f9ee9.js" -s | grep Access  
Access-Control-Allow-Origin: https://app.close.io
Access-Control-Allow-Methods: GET, HEAD
Access-Control-Max-Age: 3000
Access-Control-Allow-Credentials: true

但是,当使用Accept-Encoding: gzip请求资源时,CORS标头不会正确返回。

代码语言:javascript
复制
$ curl -H "Origin: https://app.close.io" -H "Accept-Encoding: gzip" -I "https://d4389n07pf8cq.cloudfront.net/built/app.9e1f9ee9.js" -s | grep Access 
(nothing)

为什么会这样呢?

我的CORS配置如下所示:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>https://app.close.io</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>HEAD</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>Authorization</AllowedHeader>
        <AllowedHeader>Content-*</AllowedHeader>
        <AllowedHeader>Host</AllowedHeader>
        <AllowedHeader>Accept-Encoding</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

(我还尝试了删除Accent-Encoding头的CORS配置。)

S3对象本身是经过gzipped压缩的,并且包含Content-Encoding: gzipCache-Control: public, max-age=31536000Content-Type: application/javascript的“元数据”。

我不明白为什么CloudFront+S3 CORS在请求gzip时不能正常工作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-28 03:46:17

2014年6月26日,亚马逊网络服务发布了proper Vary: Origin behavior on CloudFront,所以我添加了一些instructions on this question,反映了我们是如何正确设置它的。

票数 2
EN

Stack Overflow用户

发布于 2013-02-24 16:52:42

我认为您遇到的问题是由于CloudFront缺乏对CORS的原生支持造成的。此时,它们不支持原始头上的possible,因此CloudFront可能传递了一个旧的缓存响应,对于您的第二个请求(使用accept编码: gzip),该响应没有正确的CORS头。

请在AWS论坛上查看此帖子,以了解此缺失的CORS支持的解决方法:

https://forums.aws.amazon.com/message.jspa?messageID=422504#422532

票数 3
EN

Stack Overflow用户

发布于 2013-04-17 07:04:27

这可能会对你有所帮助,因为我已经成功地让CORS在S3和Cloudfront上工作。我注意到当S3和Cloudfront第一次拉出文件时,它们几乎缓存了头文件,即使你已经更改了它们。确保启用了"query param“版本控制,并且可以将?v=1添加到文件的末尾。这为我们和CORS“更新”了头文件,这一切都很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14666971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档