![](/img/trans.png)
[英]CORS headers missing when request header has 'Accept-Encoding' for website of CloudFront + S3
[英]Why is CloudFront varying CORS headers response based on Accept-Encoding?
我正在努力讓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
但是當使用Accept-Encoding: gzip
請求資源時,則不會正確返回CORS頭。
$ 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配置如下所示:
<?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對象本身是gzip壓縮的,並且具有Content-Encoding: gzip
“元數據” Content-Encoding: gzip
, Cache-Control: public, max-age=31536000
,以及Content-Type: application/javascript
。
我不明白為什么CloudFront + S3 CORS在請求gzip時無法正常工作。
我認為您遇到的問題是由於CloudFront缺乏對CORS的原生支持。 此時它們不支持Origin頭上的Vary,因此CloudFront可能會傳遞一個舊的緩存響應,該響應沒有為您的第二個請求提供正確的CORS頭(使用接受編碼:gzip)。
在AWS論壇上查看此線程,了解缺少CORS支持的解決方法:
https://forums.aws.amazon.com/message.jspa?messageID=422504#422532
2014年6月26日,AWS 在CloudFront上發布了適當的Vary:Origin行為,因此我在此問題上添加了一些說明,反映了我們如何正確設置它。
這可能對您有所幫助,因為我已成功獲得CORS以在S3和Cloudfront上工作。 我注意到第一次S3和Cloudfront拉文件時他們幾乎緩存了標題,即使你已經更改了它們。 確保啟用了“查詢參數”版本控制,並且可以在文件末尾添加?v=1
。 這個“更新”了我們和CORS的標題都很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.