簡體   English   中英

為什么CloudFront會根據Accept-Encoding改變CORS標頭響應?

[英]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: gzipCache-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM