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: gzip
S3 オブジェクト自体は gzip されており、 、 、の「メタデータ」がCache-Control: public, max-age=31536000
ありContent-Type: application/javascript
ます。
gzip をリクエストしたときに CloudFront+S3 CORS が正しく機能しない理由がわかりません。