要旨:
我有一个页面使用标签加载来自 s3(HTMLimg
标签)的图像,我有一个使用xmlhttprequest
. 标签加载在没有 CORS 标头的情况下被缓存,因此xmlhttprequest
看到缓存的版本,检查它的标头并因跨源错误而失败。
细节:
编辑:在 safari 5.1.6 和 chrome 21.0.1180.89 中都失败。在 Firefox 14 中运行良好。
使用 S3 的新 CORS,我CORSRule
这样设置:
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>0</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
如果我从 S3 请求图像而没有在请求标头中设置来源,我会在响应中返回没有任何 CORS 标头的图像。
由于浏览器使用缓存中的非 CORS 版本,此获取的缓存和后续 CORS 请求(确实在请求标头中设置来源的请求)被拒绝。
解决这个问题的最佳方法是什么?我可以设置一些东西,使非 CORS 版本永远不会被缓存吗??some_flag
我应该通过将 a 附加到请求的 url 来区分 CORS 请求吗?
理想情况下,即使请求不包含“来源”,我也会让 S3 始终发回所需的 CORS 标头。