ฉันมีหน้าเว็บ ( https://smartystreets.com/contact ) ที่ใช้ jQuery เพื่อโหลดไฟล์ SVG บางไฟล์จาก S3 ผ่านทาง CloudFront CDN
ใน 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 พฤติกรรมการจัดจำหน่ายเป็นชุดที่จะช่วยให้วิธี GET, HEAD, OPTIONS
http: วิธีการแคชเหมือนกัน ไปข้างหน้าส่วนหัวถูกตั้งค่าเป็น "รายการที่อนุญาต" และรายการที่อนุญาตนั้นรวมถึง "การเข้าถึงการควบคุมการร้องขอส่วนหัวการเข้าถึงการควบคุมการร้องขอวิธีการกำเนิด
ความจริงที่ว่ามันทำงานได้หลังจากโหลดเบราว์เซอร์น้อยแคชดูเหมือนว่าบ่งบอกว่าทุกอย่างเป็นอย่างดีในด้าน S3 / CloudFront อื่นเหตุผลที่จะส่งเนื้อหา แต่ทำไมจะไม่ส่งเนื้อหาในมุมมองหน้าเริ่มต้น
ฉันกำลังทำงานใน Google Chrome บน macOS Firefox ไม่มีปัญหาในการรับไฟล์ทุกครั้ง Opera NEVER ไม่ได้รับไฟล์ Safari จะรับภาพหลังจากรีเฟรชหลายครั้ง
ใช้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