मेरे पास एक वेबपेज ( https://smartystreets.com/contact ) है जो क्लाउड 3 सीडीएन के माध्यम से एस 3 से कुछ एसवीजी फ़ाइलों को लोड करने के लिए jQuery का उपयोग करता है।
Chrome में मैं एक गुप्त विंडो के साथ-साथ कंसोल खोलूंगा। फिर मैं पेज लोड करूंगा। पृष्ठ लोड होने के साथ, मुझे आमतौर पर कंसोल में 6 से 8 संदेश मिलेंगे जो इस तरह दिखाई देते हैं:
XMLHttpRequest cannot load
https://d79i1fxsrar4t.cloudfront.net/assets/img/feature-icons/documentation.08e71af6.svg.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'https://smartystreets.com' is therefore not allowed access.
यदि मैं पृष्ठ का एक मानक पुनः लोड करता हूं, यहां तक कि कई बार, तो मुझे वही त्रुटियां मिलती रहती हैं। अगर मैं करता हूं Command+Shift+R
तो अधिकांश, और कभी-कभी सभी, XMLHttpRequest
त्रुटि के बिना छवियों को लोड करेगा ।
कभी-कभी छवियों के लोड होने के बाद भी, मैं ताज़ा करूंगा और एक या अधिक छवियां लोड नहीं होंगी और उस XMLHttpRequest
त्रुटि को फिर से लौटाएंगी।
मैंने S3 और Cloudfront पर सेटिंग्स की जाँच, परिवर्तन और पुनः जाँच की है। S3 में मेरा CORS कॉन्फ़िगरेशन ऐसा दिखता है:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedOrigin>http://*</AllowedOrigin>
<AllowedOrigin>https://*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
(नोट: शुरू में केवल <AllowedOrigin>*</AllowedOrigin>
यही समस्या थी।)
CloudFront में HTTP Methods को अनुमति देने के लिए वितरण व्यवहार सेट किया गया है GET, HEAD, OPTIONS
:। कैश्ड तरीके समान हैं। फ़ॉरवर्ड हेडर्स "व्हाइटलिस्ट" पर सेट है और उस वाइटलिस्ट में "एक्सेस-कंट्रोल-रिक्वेस्ट-हेडर्स, एक्सेस-कंट्रोल-रिक्वेस्ट-मेथड, ओरिजिन" शामिल है।
तथ्य यह है कि यह कैश-कम ब्राउज़र रीलोड के बाद काम करता है, यह इंगित करता है कि सभी S3 / CloudFront साइड पर अच्छी तरह से है, अन्यथा सामग्री वितरित क्यों की जाएगी। लेकिन फिर प्रारंभिक पृष्ठ-दृश्य पर सामग्री क्यों नहीं दी जाएगी?
मैं macOS पर Google Chrome में काम कर रहा हूं। फ़ायरफ़ॉक्स को हर बार फ़ाइलें प्राप्त करने में कोई समस्या नहीं होती है। ओपेरा कभी फ़ाइलों को प्राप्त करता है। सफारी कई ताज़ा करने के बाद छवियों को उठाएगा।
उपयोग करने से curl
मुझे कोई समस्या नहीं होती है:
curl -I -H 'Origin: smartystreets.com' https://d79i1fxsrar4t.cloudfront.net/assets/img/phone-icon-outline.dc7e4079.svg
HTTP/1.1 200 OK
Content-Type: image/svg+xml
Content-Length: 508
Connection: keep-alive
Date: Tue, 20 Jun 2017 17:35:57 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET
Access-Control-Max-Age: 3000
Last-Modified: Thu, 15 Jun 2017 16:02:19 GMT
ETag: "dc7e4079f937e83291f2174853adb564"
Cache-Control: max-age=31536000
Expires: Wed, 01 Jan 2020 23:59:59 GMT
Accept-Ranges: bytes
Server: AmazonS3
Vary: Origin,Access-Control-Request-Headers,Access-Control-Request-Method
Age: 4373
X-Cache: Hit from cloudfront
Via: 1.1 09fc52f58485a5da8e63d1ea27596895.cloudfront.net (CloudFront)
X-Amz-Cf-Id: wxn_m9meR6yPoyyvj1R7x83pBDPJy1nT7kdMv1aMwXVtHCunT9OC9g==
कुछ ने सुझाव दिया है कि मैं CloudFront वितरण को हटा देता हूं और इसे पुनः बनाता हूं। बल्कि कठोर और असुविधाजनक तय लगता है।
इस समस्या का कारण क्या है?
अद्यतन करें:
छवि से प्रतिक्रिया हेडर जोड़ना जो लोड करने में विफल रहा।
age:1709
cache-control:max-age=31536000
content-encoding:gzip
content-type:image/svg+xml
date:Tue, 20 Jun 2017 17:27:17 GMT
expires:2020-01-01T23:59:59.999Z
last-modified:Tue, 11 Apr 2017 18:17:41 GMT
server:AmazonS3
status:200
vary:Accept-Encoding
via:1.1 022c901b294fedd7074704d46fce9819.cloudfront.net (CloudFront)
x-amz-cf-id:i0PfeopzJdwhPAKoHpbCTUj1JOMXv4TaBgo7wrQ3TW9Kq_4Bx0k_pQ==
x-cache:Hit from cloudfront