【发布时间】:2012-09-11 23:56:38
【问题描述】:
要点:
我有一个页面使用从 s3 加载图像的标签(HTML img 标签),我有一个使用 xmlhttprequest 的页面。标签加载在没有 CORS 标头的情况下被缓存,因此 xmlhttprequest 看到缓存的版本,检查它的标头并失败并出现跨源错误。
详情:
edit:在 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 附加到请求的 url 来区分 CORS 请求吗?
理想情况下,即使请求不包含“origin”,我也会让 S3 始终发回所需的 CORS 标头。
【问题讨论】:
-
你用的是什么浏览器?这种行为是否在所有浏览器中都会出现?这听起来像一个浏览器错误。您提出的查询参数解决方案听起来不错。
-
添加了“编辑:在 safari 5.1.6 和 chrome 21.0.1180.89 中都失败。在 Firefox 14 中运行良好。”
-
那么可能是一个 WebKit 错误。这听起来像是同一个问题:bugs.webkit.org/show_bug.cgi?id=63090 该错误建议添加标题“Vary: Origin”可能会解决问题。
-
这个问题也已经在AWS S3 Forums上报告了
标签: caching amazon-s3 xmlhttprequest cors