Biraz ince ayar yaptıktan sonra, bunu sorgu dizisi kesmesi olmadan çalıştırdım. Daha fazla bilgi burada: http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/RequestAndResponseBehaviorS3Origin.html#RequestS3-cors
Tüm kurulumumu gözden geçireceğim, böylece ne yaptığımı görmek kolay, umarım bu başkalarına yardımcı olur.
Arka Plan Bilgileri: Varlıkları S3'e yerleştirmek için asset_sync gem'e sahip bir Rails uygulaması kullanıyorum. Bu, yazı tiplerini içerir.
S3 konsolunda, burada klasörüme, özelliklerime ve 'cors yapılandırmasını düzenle'ye tıkladım:
Metin alanının içinde şöyle bir şey var:
<?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>
Ardından Cloudfront panelinde ( https://console.aws.amazon.com/cloudfront/home ) bir dağıtım oluşturdum, S3 işaret eden bir Origin ekledim
Ardından, S3 tabanlı başlangıç noktası kurulumuna işaret etmek için varsayılan bir yol için bir davranış eklendi. Ayrıca Beyaz Liste başlıklarına tıklamak ve ekledimOrigin
:
Şimdi olan şey şudur ki bunun doğru olduğuna inanıyorum:
1) S3 başlıklarının doğru ayarlanıp ayarlanmadığını kontrol edin
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) Cloudfront'un üstbilgilerle çalıştığını kontrol edin
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==
(Bu dosyalar 180 saniye önbelleğe alındığından, ancak aynı şeyin isabetler üzerinde de çalıştığı için, yukarıdakinin cloudfront'ta eksik olduğunu unutmayın)
3) Cloudfront'u farklı bir kaynakla vurun (ancak S3 demeti için CORS'da izin verilen bir kaynak) - Access-Control-Allow-Origin
önbelleğe alınmaz! Yaşasın!
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==
Yukarıda, alan adının bir sorgu dizesi saldırısı olmadan başarıyla değiştirildiğini unutmayın.
Origin başlığını değiştirdiğimde, her zaman X-Cache: Miss from cloudfront
ilk istekte bir var gibi görünüyor ve ardından beklenen şeyi alıyorumX-Cache: Hit from cloudfront
Not: curl -I (büyük harf I) yaparken, Access-Control-Allow-Origin başlıklarını yalnızca bir BAŞLIK olarak GÖSTERMEYECEĞİNİ, bunu bir GET haline getirmek ve yukarı kaydırmak için -i yapıyorum.
Access-Control-Allow-Origin
başlık önbelleğe alınır ve farklı bir alt alan üzerinden sonraki bir istek yapıldığında CORS geçersiz hale gelir mi?