Bazı SVG dosyalarını S3'ten CloudFront CDN'ye yüklemek için jQuery kullanan bir web sayfam var ( https://smartystreets.com/contact ).
Chrome'da, konsolun yanı sıra bir Gizli penceresi de açacağım. Sonra sayfayı yükleyeceğim. Sayfa yüklenirken, tipik olarak konsolda buna benzeyen 6 ila 8 ileti alıyorum:
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.
Sayfanın standart bir yeniden yüklemesini yaparsam, çok zaman bile olsa aynı hataları almaya devam ediyorum. Bunu yaparsam Command+Shift+R
, görüntülerin çoğunu bazen de hepsini XMLHttpRequest
hatasız yükleyeceğim .
Bazen görüntüler yüklendikten sonra bile, yenilenir ve görüntülerden bir veya daha fazlası yüklenmez ve bu XMLHttpRequest
hatayı tekrar döndürmez .
S3 ve Cloudfront'taki ayarları kontrol ettim, değiştirdim ve yeniden kontrol ettim. S3'te CORS konfigürasyonum şöyle gözüküyor:
<?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>
(Not: başlangıçta yalnızca <AllowedOrigin>*</AllowedOrigin>
aynı problem vardı .)
CloudFront yılında dağıtım davranışı HTTP Yöntemleri izin verecek şekilde ayarlanır: GET, HEAD, OPTIONS
. Önbelleğe alınmış yöntemler aynıdır. İleri Başlıklar "Beyaz Liste" olarak ayarlanmıştır ve bu beyaz liste "Erişim Denetimi-İsteği-Başlıkları, Erişim Denetimi-İsteği-Yöntemi, Kökeni" içerir.
Önbelleksiz bir tarayıcı yeniden yüklendikten sonra çalışması, S3 / CloudFront tarafında her şeyin yolunda olduğunu, içeriğin neden yayınlandığını gösteriyor gibi görünüyor. Peki o zaman içerik neden ilk sayfa görünümünde yayınlanmıyor?
MacOS'ta Google Chrome'da çalışıyorum. Firefox'un dosyaları her zaman almakta bir sorunu yok. Opera ASLA dosyaları almaz. Safari birkaç yenilemeden sonra görüntüleri alacak.
Kullanarak curl
herhangi bir sorun alamıyorum:
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==
Bazıları CloudFront dağıtımını silmemi ve yeniden oluşturmamı önerdi. Oldukça sert ve uygunsuz bir düzeltme gibi görünüyor.
Bu soruna ne sebep oluyor?
Güncelleştirme:
Yüklenemeyen bir görüntüden yanıt başlıkları ekleme.
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