Tôi có một trang web ( https://smartystreets.com/contact ) sử dụng jQuery để tải một số tệp SVG từ S3 thông qua CDN của CloudFront.
Trong Chrome tôi sẽ mở một cửa sổ Ẩn danh cũng như bảng điều khiển. Sau đó tôi sẽ tải trang. Khi tải trang, tôi thường sẽ nhận được 6 đến 8 tin nhắn trong bảng điều khiển trông giống như thế này:
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.
Nếu tôi thực hiện tải lại tiêu chuẩn của trang, thậm chí nhiều lần, tôi tiếp tục gặp các lỗi tương tự. Nếu tôi làm Command+Shift+R
thì hầu hết, và đôi khi tất cả, các hình ảnh sẽ tải mà không có XMLHttpRequest
lỗi.
Đôi khi ngay cả sau khi hình ảnh được tải, tôi sẽ làm mới và một hoặc nhiều hình ảnh sẽ không tải và trả lại XMLHttpRequest
lỗi đó .
Tôi đã kiểm tra, thay đổi và kiểm tra lại các cài đặt trên S3 và Cloudfront. Trong S3, cấu hình CORS của tôi trông như thế này:
<?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>
(Lưu ý: ban đầu chỉ có <AllowedOrigin>*</AllowedOrigin>
, cùng một vấn đề.)
Trong CloudFront, hành vi phân phối được đặt để cho phép Phương thức HTTP : GET, HEAD, OPTIONS
. Các phương thức lưu trữ là như nhau. Tiêu đề chuyển tiếp được đặt thành "Danh sách trắng" và danh sách trắng đó bao gồm, "Tiêu đề kiểm soát truy cập-yêu cầu, tiêu đề kiểm soát truy cập, yêu cầu, nguồn gốc".
Thực tế là nó hoạt động sau khi tải lại trình duyệt không có bộ nhớ cache dường như cho thấy tất cả đều ổn ở phía S3 / CloudFront, ngoài ra tại sao nội dung sẽ được phân phối. Nhưng tại sao nội dung sẽ không được phân phối trên lượt xem trang ban đầu?
Tôi đang làm việc trong Google Chrome trên macOS. Firefox không có vấn đề gì khi nhận các tệp mỗi lần. Opera KHÔNG BAO GIỜ được các tập tin. Safari sẽ chọn hình ảnh sau vài lần làm mới.
Sử dụng curl
tôi không gặp vấn đề gì:
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==
Một số người đã gợi ý rằng tôi xóa bản phân phối CloudFront và tạo lại nó. Có vẻ như một sửa chữa khá khắc nghiệt và bất tiện.
Điều gì gây ra vấn đề này?
Cập nhật:
Thêm tiêu đề phản hồi từ một hình ảnh không tải được.
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