Cloudfront पर Access-Control-Allow-Origin की स्थापना


15

मुझे AWS Cloudfront का उपयोग करके फ़ायरफ़ॉक्स को स्थैतिक संपत्ति की सेवा करने में समस्या हो रही है।

Chrome सही काम करता है, लेकिन फ़ायरफ़ॉक्स एक CorS त्रुटि लौटा रहा है।

यदि मैं कर्ल निष्पादित करता हूं, मुझे मिलता है:

HTTP/1.1 200 OK
Content-Type: application/x-font-opentype
Content-Length: 39420
Connection: keep-alive
Date: Mon, 11 Aug 2014 21:53:50 GMT
Cache-Control: public, max-age=31557600
Expires: Sun, 09 Aug 2015 01:28:02 GMT
Last-Modified: Fri, 08 Aug 2014 19:28:05 GMT
ETag: "9df744bdf9372cf4cff87bb3e2d68fc8"
Accept-Ranges: bytes
Server: AmazonS3
Age: 2743
X-Cache: Hit from cloudfront
Via: 1.1 c445b20dfbf3128d810e975e5d84e2cd.cloudfront.net (CloudFront)
X-Amz-Cf-Id: ...

जो मुझे लगता है कि हेडर की जरूरत है:

Access-Control-Allow-Origin: *

क्या कोई मेरी मदद कर सकता है? क्यों यह फ़ायरफ़ॉक्स और क्रोम नहीं पर एक समस्या है? मैं इसे कैसे सुलझाऊं?

जवाबों:


18

पहली बात, आपको यह सुनिश्चित करने की आवश्यकता है कि आप मूल हेडर को श्वेतसूची में दें:

यदि आप चाहते हैं कि CloudFront क्रॉस-ऑरिजिनल रिसोर्स शेयरिंग सेटिंग्स का सम्मान करे, तो CloudFront को ओरिजिन हेडर को अपने ओरिजिन में फॉरवर्ड करें।

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/RequestAndResponseBehaviorCustomOrigin.html#request-custom-cors

इसे भी देखें: http://aws.amazon.com/blogs/aws/enhanced-cloudfront-customization/

वैसे, सर्वरफॉल्ट / स्टैकओवरफ्लो पर कई समान प्रश्न और बहुत सारे उत्तर हैं।


4

यह स्वीकृत उत्तर इंगित करता है की तुलना में थोड़ा अधिक जटिल है।

क्लाउडफ्रंट + एस 3 का उपयोग करते समय कोर समर्थन वास्तव में एस 3 में लागू किया गया है और यह अमेज़ॅन के अनुसार इस तरह काम करता है:

अनुरोध के मूल शीर्षलेख को AllowedOrigin तत्व से मेल खाना चाहिए।

अनुरोध विधि (उदाहरण के लिए, GET या PUT) या एक्सेस-कंट्रोल रिक्वेस्ट-मेथड हैडर के मामले में प्रीफ्लाइट ऑप्शंस रिक्वेस्ट में से एक AllowedMethod तत्वों में से एक होना चाहिए।

अनुरोध के एक्सेस-कंट्रोल-रिक्वेस्ट-हेडर हेडर में सूचीबद्ध प्रत्येक हेडर प्रीफ़लाइट अनुरोध पर एक AllowedHeader तत्व से मेल खाना चाहिए।

यह अच्छा समझ में आता है, जो स्पष्ट नहीं हो सकता है कि यदि क्लाइंट द्वारा कोई मूल हेडर नहीं भेजा जाता है, तो यह प्रसंस्करण बिल्कुल नहीं किया जाता है। और हम क्लाउडफ्रंट का उपयोग कर रहे हैं, यदि आप केवल स्थैतिक संपत्ति की मेजबानी कर रहे हैं, तो आपने संभवतः कैशिंग करते समय सभी हेडर को अनदेखा करने के लिए इसे सेट किया है। इसलिए यदि विशिष्ट बढ़त नोड से प्रत्येक फ़ाइल के लिए पहला अनुरोध मूल हेडर शामिल नहीं करता है, तो यह एक्सेस-कंट्रोल-अनुमति-मूल हेडर के बिना प्रतिक्रिया को कैश करेगा।

परिणाम यह है कि पहला आने वाला अनुरोध यह निर्धारित करेगा कि कैश समाप्त होने तक सभी अनुरोधों के लिए कौन से हेडर लौटाए गए हैं।

इसे ठीक करने / हल करने के कई तरीके हैं।

  • "मूल" हेडर के आधार पर सशर्त कैशिंग करने के लिए क्लाउडफ्रंट सेटअप करें।

यह ठीक काम करता है यदि आप केवल कुछ या एक मूल की अपेक्षा करते हैं, लेकिन अन्यथा आपका कैशिंग अनुपात वास्तव में खराब हो सकता है।

  • लैम्बडा @ एज का उपयोग हेडर्स को जबरन सेट करने के लिए करें, यह प्रत्येक मूल (S3) अनुरोध के लिए बस एक बार किया जा सकता है।

पूरी तरह से लचीला, लेकिन ओवरहेड और लागत जोड़ता है।

  • क्लाउडफ्रंट को "मूल" हेडर को प्रत्येक अनुरोध के लिए डमी मूल्य पर ओवरराइड करें।

यह "एक्सेस-कंट्रोल-अलाउंस-ओरिजिन: *" केस में वास्तव में उपयोगी है और यह हैक का एक सा है, लेकिन क्लाउडफ्रंट + एस 3 पर स्थिर संपत्ति की मेजबानी करते समय यह संभवतः सबसे अच्छा वर्तमान समाधान है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.