我有一个网页(https://smartystreets.com/contact),该网页使用jQuery通过CloudFront CDN从S3加载一些SVG文件。
在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上使用Google 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