17

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 構成も試しました。)

Content-Encoding: gzipS3 オブジェクト自体は gzip されており、 、 、の「メタデータ」がCache-Control: public, max-age=31536000ありContent-Type: application/javascriptます。

gzip をリクエストしたときに CloudFront+S3 CORS が正しく機能しない理由がわかりません。

4

3 に答える 3

3

あなたが抱えている問題は、CloudFront が CORS をネイティブでサポートしていないことが原因だと思います。現時点では、Origin ヘッダーの Vary はサポートされていないため、CloudFront が 2 番目のリクエスト (accept encoding: gzip) に対して正しい CORS ヘッダーを持たない古いキャッシュされた応答を配信した可能性があります。

この不足している CORS サポートの回避策については、AWS フォーラムのこのスレッドを参照してください。

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

于 2013-02-24T08:52:42.030 に答える
0

CORS を S3 と Cloudfront で正常に動作させることができたので、これが役立つかもしれません。S3 と Cloudfront が初めてファイルをプルするときに、ヘッダーを変更した後でも、ほとんどヘッダーをキャッシュしていることに気付きました。「query param」のバージョン管理が有効になっていることを?v=1確認し、ファイルの末尾に追加できるようにしてください。これによりヘッダーが「更新」され、CORS はすべて良好でした。

于 2013-04-16T23:04:27.037 に答える