Saya memiliki halaman web ( https://smartystreets.com/contact ) yang menggunakan jQuery untuk memuat beberapa file SVG dari S3 melalui CloudFront CDN.
Di Chrome saya akan membuka jendela Penyamaran serta konsol. Maka saya akan memuat halaman. Saat halaman dimuat, saya biasanya akan mendapatkan 6 hingga 8 pesan di konsol yang mirip dengan ini:
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.
Jika saya melakukan memuat ulang standar halaman, bahkan beberapa kali, saya terus mendapatkan kesalahan yang sama. Jika saya lakukan Command+Shift+R
maka sebagian besar, dan kadang-kadang semua, gambar akan dimuat tanpa XMLHttpRequest
kesalahan.
Kadang-kadang bahkan setelah gambar dimuat, saya akan menyegarkan dan satu atau lebih gambar tidak akan memuat dan mengembalikan XMLHttpRequest
kesalahan itu lagi.
Saya telah memeriksa, mengubah, dan memeriksa ulang pengaturan pada S3 dan Cloudfront. Pada S3 konfigurasi CORS saya terlihat seperti ini:
<?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>
(Catatan: awalnya hanya <AllowedOrigin>*</AllowedOrigin>
memiliki masalah yang sama.)
Dalam CloudFront perilaku distribusi diatur untuk memungkinkan Metode HTTP: GET, HEAD, OPTIONS
. Metode yang di-cache sama. Header Teruskan diatur ke "Daftar Putih" dan daftar putih itu termasuk, "Akses-Kontrol-Permintaan-Header, Akses-Kontrol-Permintaan-Metode, Asal".
Fakta bahwa ia berfungsi setelah browser memuat ulang tanpa cache tampaknya mengindikasikan bahwa semuanya baik-baik saja di sisi S3 / CloudFront, kalau tidak mengapa konten dikirimkan. Tapi mengapa konten tidak dikirim pada tampilan halaman awal?
Saya bekerja di Google Chrome di macOS. Firefox tidak memiliki masalah dalam mendapatkan file setiap saat. Opera TIDAK PERNAH mendapatkan file. Safari akan mengambil gambar setelah beberapa kali penyegaran.
Menggunakan curl
Saya tidak mendapatkan masalah:
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==
Beberapa menyarankan agar saya menghapus distribusi CloudFront dan membuatnya kembali. Sepertinya perbaikan yang agak keras dan tidak nyaman.
Apa yang menyebabkan masalah ini?
Memperbarui:
Menambahkan tajuk respons dari gambar yang gagal dimuat.
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