Setelah beberapa tweaker, saya tampaknya telah berhasil ini tanpa peretasan string kueri. Info lebih lanjut di sini: http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/RequestAndResponseBehaviorS3Origin.html#RequestS3-cors
Saya akan pergi melalui seluruh pengaturan saya sehingga mudah untuk melihat apa yang telah saya lakukan, semoga ini membantu orang lain.
Informasi Latar Belakang: Saya menggunakan aplikasi Rails yang memiliki permata asset_sync untuk menempatkan aset ke S3. Ini termasuk font.
Di dalam konsol S3, saya mengklik ember, properti, dan 'edit konfigurasi kors' saya, di sini:
Di dalam textarea saya punya sesuatu seperti:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>https://*.example.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Kemudian di dalam panel Cloudfront ( https://console.aws.amazon.com/cloudfront/home ) saya membuat distribusi, menambahkan Origin yang menunjuk ke ember S3 saya
Kemudian menambahkan perilaku untuk jalur default untuk menunjuk ke pengaturan saya asal S3 berbasis. Apa yang saya juga lakukan adalah mengklik header Daftar Putih dan menambahkan Origin
:
Apa yang terjadi sekarang adalah yang berikut, yang saya yakini benar:
1) Periksa apakah header S3 sedang diatur dengan benar
curl -i -H "Origin: https://example.com" https://s3.amazonaws.com/xxxxxxxxx/assets/fonts/my-cool-font.ttf
HTTP/1.1 200 OK
x-amz-id-2: Ay63Qb5uR98ag47SRJ91+YALtc4onRu1JUJgMTU98Es/pzQ3ckmuWhzzbTgDTCt+
x-amz-request-id: F1FFE275C0FBE500
Date: Thu, 14 Aug 2014 09:39:40 GMT
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: GET
Access-Control-Max-Age: 3000
Access-Control-Allow-Credentials: true
Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method
Cache-Control: public, must-revalidate, proxy-revalidate, max-age=180
Last-Modified: Mon, 09 Dec 2013 14:29:04 GMT
ETag: "98918ee7f339c7534c34b9f5a448c3e2"
Accept-Ranges: bytes
Content-Type: application/x-font-ttf
Content-Length: 12156
Server: AmazonS3
2) Periksa Cloudfront berfungsi dengan header
curl -i -H "Origin: https://example.com" https://xxxxx.cloudfront.net/assets/fonts/my-cool-font.ttf
HTTP/1.1 200 OK
Content-Type: application/x-font-ttf
Content-Length: 12156
Connection: keep-alive
Date: Thu, 14 Aug 2014 09:35:26 GMT
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: GET
Access-Control-Max-Age: 3000
Access-Control-Allow-Credentials: true
Cache-Control: public, must-revalidate, proxy-revalidate, max-age=180
Last-Modified: Mon, 09 Dec 2013 14:29:04 GMT
ETag: "98918ee7f339c7534c34b9f5a448c3e2"
Accept-Ranges: bytes
Server: AmazonS3
Vary: Origin
X-Cache: Miss from cloudfront
Via: 1.1 77bdacfea247b6cbe84dffa61da5a554.cloudfront.net (CloudFront)
X-Amz-Cf-Id: cmCxaUcFf3bT48zpPw0Q-vDDza0nZoWm9-_3qY5pJBhj64iTpkgMlg==
(Catatan di atas adalah kehilangan dari cloudfront karena file-file ini di-cache selama 180 detik, tetapi hal yang sama berhasil pada hit)
3) Memukul cloudfront dengan asal yang berbeda (tapi yang diizinkan pada CORS untuk bucket S3) - yang Access-Control-Allow-Origin
tidak di-cache! yay!
curl -i -H "Origin: https://www2.example.com" https://xxxxx.cloudfront.net/assets/fonts/my-cool-font.ttf
HTTP/1.1 200 OK
Content-Type: application/x-font-ttf
Content-Length: 12156
Connection: keep-alive
Date: Thu, 14 Aug 2014 10:02:33 GMT
Access-Control-Allow-Origin: https://www2.example.com
Access-Control-Allow-Methods: GET
Access-Control-Max-Age: 3000
Access-Control-Allow-Credentials: true
Cache-Control: public, must-revalidate, proxy-revalidate, max-age=180
Last-Modified: Mon, 09 Dec 2013 14:29:04 GMT
ETag: "98918ee7f339c7534c34b9f5a448c3e2"
Accept-Ranges: bytes
Server: AmazonS3
Vary: Origin
X-Cache: Miss from cloudfront
Via: 1.1 ba7014bad8e9bf2ed075d09443dcc4f1.cloudfront.net (CloudFront)
X-Amz-Cf-Id: vy-UccJ094cjdbdT0tcKuil22XYwWdIECdBZ_5hqoTjr0tNH80NQPg==
Perhatikan di atas bahwa domain berhasil diubah tanpa peretasan string kueri.
Ketika saya mengubah header Origin, sepertinya selalu ada X-Cache: Miss from cloudfront
pada permintaan pertama kemudian setelah itu saya mendapatkan yang diharapkanX-Cache: Hit from cloudfront
PS Perlu dicatat bahwa ketika melakukan curl -I (modal I) TIDAK akan menunjukkan header Access-Control-Allow-Origin karena hanya HEAD, saya lakukan -i untuk membuatnya GET dan gulir ke atas.
Access-Control-Allow-Origin
header di-cache dan membatalkan CORS ketika permintaan selanjutnya dilakukan melalui subdomain yang berbeda?