कुछ tweaking के बाद मुझे लगता है कि यह क्वेरी स्ट्रिंग हैक के बिना काम करने के लिए मिला है। यहाँ और जानकारी: http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/RequestAndResponseBehaviorS3Origin.html#RequestS3-cors
मैं अपने पूरे सेटअप से गुजरने जा रहा हूं ताकि यह देखना आसान हो जाए कि मैंने क्या किया है, उम्मीद है कि इससे दूसरों को मदद मिलेगी।
पृष्ठभूमि की जानकारी: मैं R3 ऐप का उपयोग कर रहा हूं, जिसमें S3 पर संपत्ति डालने के लिए संपत्ति_sync मणि है। इसमें फोंट शामिल हैं।
S3 कंसोल के भीतर, मैंने अपनी बाल्टी, गुण और 'cors कॉन्फ़िगरेशन को संपादित करें' पर क्लिक किया, यहाँ:
Textarea के अंदर मैं कुछ इस तरह है:
<?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>
फिर क्लाउडफ्रंट पैनल ( https://console.aws.amazon.com/cloudfront/home ) के भीतर मैंने एक वितरण बनाया, एक उत्पत्ति जोड़ी जो मेरे S3 बाल्टी की ओर इशारा करती है
फिर S3 आधारित मूल I सेटअप को इंगित करने के लिए एक डिफ़ॉल्ट पथ के लिए एक व्यवहार जोड़ा। मैंने जो भी किया वह श्वेतसूची हेडर पर क्लिक किया और जोड़ा गया Origin
:
क्या होता है अब निम्नलिखित है, जो मेरा मानना है कि सही है:
1) जांचें कि S3 हेडर सही तरीके से सेट हो रहे हैं
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) हेडर के साथ चेकफ्रंट काम करता है
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==
(ध्यान दें कि ऊपर बादल से एक मिस था क्योंकि ये फाइलें 180 सेकंड के लिए कैश की जाती हैं, लेकिन वही हिट पर काम कर रही थी)
3) एक अलग मूल के साथ क्लाउडफ्रंट मारो (लेकिन एस 3 बाल्टी के लिए कोर पर अनुमति दी गई है) - Access-Control-Allow-Origin
कैश नहीं है! वाह!
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==
ऊपर नोट करें कि क्वेरी स्ट्रिंग हैक के बिना डोमेन सफलतापूर्वक बदल गया है।
जब मैं ओरिजिन हेडर को बदलता हूं, X-Cache: Miss from cloudfront
तो पहले अनुरोध पर हमेशा ऐसा लगता है कि बाद में मुझे उम्मीद हैX-Cache: Hit from cloudfront
पुनश्च यह ध्यान देने योग्य है कि कर्ल-आई (पूंजी I) करते समय एक्सेस-कंट्रोल-अनुमति-मूल हेडर नहीं दिखाएगा क्योंकि यह केवल एक हेड है, मैं इसे जीईटी बनाने और स्क्रॉल करने के लिए करता हूं।
Access-Control-Allow-Origin
जब बाद में एक अलग उपडोमेन के माध्यम से अनुरोध किया जाता है , तो हेडर को कैश और अमान्य कर दिया जाता है?