我将图像资产存储在 S3 上并使用 XHR 请求它们。我在 S3 上有一个 CORS 策略文件,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
<MaxAgeSeconds>3000</MaxAgeSeconds>
</CORSRule>
</CORSConfiguration>
在 Chrome 和 Firefox 中一切都很好,但我在 Safari 中遇到了问题......
如果我清除缓存并请求图像,则没有问题并且图像加载成功,但是如果我然后刷新页面,则图像无法加载,并且出现以下错误:
XMLHttpRequest 无法加载 http://s3-eu-west-1.amazonaws.com/my.bucket.com/photographs/example.jpg?1369324610。Access-Control-Allow-Origin 不允许来源http://example.dev 。
使用 Charles 监视网络,我可以看到在第二个请求中,没有向 S3 发出请求。
所以这个问题似乎与 Safari 的缓存有关。
有谁知道为什么我在 Safari 中遇到此错误?
加载代码是一个名为PreloadJS的库的一部分,负责加载的类在这里。从第 370 行开始的 p_createXHR 包含 XHR 创建代码。但是,在密切关注此功能后,成功请求和失败请求之间的 XHR 请求似乎是相同的。