jQuery를 사용하여 CloudFront CDN을 통해 S3에서 일부 SVG 파일을로드 하는 웹 페이지 ( https://smartystreets.com/contact )가 있습니다.
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 메서드를 허용하도록 설정되어 있습니다. GET, HEAD, OPTIONS
있습니다. 캐시 된 방법은 동일합니다. 전달 헤더는 "화이트리스트"로 설정되고 화이트리스트에는 "액세스 제어 요청 헤더, 액세스 제어 요청 방법, 원본"이 포함됩니다.
캐시가없는 브라우저를 다시로드 한 후에 작동한다는 사실은 모든 것이 S3 / CloudFront 측에 잘 있음을 나타내는 것으로 보입니다. 그렇지 않으면 왜 컨텐츠가 전달됩니까? 그렇다면 왜 콘텐츠가 초기 페이지 뷰에 전달되지 않습니까?
macOS의 Chrome에서 일하고 있습니다. Firefox는 매번 파일을 가져 오는 데 문제가 없습니다. Opera는 절대 파일을 가져 오지 않습니다. 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