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

phi*_*reo 16 amazon-s3 cross-domain amazon-web-services cors amazon-cloudfront

我正在努力让CORS与Amazon S3 + CloudFront一起正常运行.

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

$ 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
Run Code Online (Sandbox Code Playgroud)

但是当请求资源时,Accept-Encoding: gzipCORS头文件没有正确返回.

$ curl -H "Origin: https://app.close.io" -H "Accept-Encoding: gzip" -I "https://d4389n07pf8cq.cloudfront.net/built/app.9e1f9ee9.js" -s | grep Access 
(nothing)
Run Code Online (Sandbox Code Playgroud)

这是为什么?

我的CORS配置如下所示:

<?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>
Run Code Online (Sandbox Code Playgroud)

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

的S3对象本身gzip压缩,且具有的"元数据" Content-Encoding: gzip,Cache-Control: public, max-age=31536000Content-Type: application/javascript.

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

Bre*_*ett 2

2014 年 6 月 26 日,AWS在 CloudFront 上发布了正确的 Vary: Origin 行为,因此我添加了一些关于这个问题的说明,反映了我们如何正确设置它。