Amazon S3 CORS 配置 XMLHttpRequest GET
Posted
技术标签:
【中文标题】Amazon S3 CORS 配置 XMLHttpRequest GET【英文标题】:Amazon S3 CORS Configuration XMLHttpRequest GET 【发布时间】:2013-01-07 07:58:06 【问题描述】:我正在通过 Amazon S3 托管一个静态网站,并且我有一些 javascript 可以调用另一个域并解析 XML、JSON 或任何它获取的内容。
我关注了 *** 上的许多帖子以及与之链接的各种博客帖子,声称可以使其正常工作,但即使在非常密切地关注之后,我也无法复制结果。
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
</CORSRule>
我什至尝试在规则中添加和不添加以下内容,
<AllowedHeader>*</AllowedHeader>
以下链接允许您通过发送 XMLHttpRequests 来测试是否启用了 CORS,并表示它无效,因此未正确设置或识别 CORS。
http://client.cors-api.appspot.com/client/
此处的 Amazon S3 文档中建议的是可能的线索,
http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETcors.html
这表示我们需要设置“s3:GetCORSConfiguration”权限,我通过类似...
"操作": ["s3:GetObject", "s3:GetCORSConfiguration"],
在 AWS 控制面板的“编辑存储桶策略”部分,但它给出了错误并且无法保存,因为它无法识别此操作?
这里有一篇关于 stackexchange 的类似帖子,
HTTP GET to amazon aws from jquery or XMLHttpRequest fails with Origin is not allowed by Access-Control-Allow-Origin
似乎表明,如果我有一个托管在 S3 上的网站,它不能将其配置为生成 GET 到第 3 方资源的 XMLHttpRequest?
我觉得我在绕圈子......那里有人有任何线索/建议吗?谢谢。
【问题讨论】:
【参考方案1】:您必须公开访问控制标头。试试这个:
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<ExposeHeader>Access-Control-Allow-Origin</ExposeHeader>
<ExposeHeader>Access-Control-Allow-Methods</ExposeHeader>
</CORSRule>
【讨论】:
【参考方案2】:这里可能与我们刚刚在我们的应用程序上完成的示例有关,该示例与 https 相关,这是我们某些客户端计算机上的硬编码配置。我不知道这到底是什么意思,但它可能是一个检查的地方。
而不是 http:// 尝试 https://
XMLHttpRequest to Amazon S3 fails only on some computers
【讨论】:
【参考方案3】:我认为你很困惑或者我误读了你的问题。
您在您的网站上启用了 CORS,以便其他网站可以向您的页面发出请求。
在您的 S3 站点上启用 CORS 将允许 example.com 与您的 S3 页面对话。它不允许您的网站与 example.com 对话。
为了让您向其他域发出请求,它们必须启用权限。你不能神奇地为他们的域打开它。这就像说您允许自己走进白宫并使用总统的浴室。当您跳过围栏时,特勤局将用武力拒绝该请求。
【讨论】:
哈哈,谢谢你的回复,我可能弄错了......但我很困惑,我只是不确定...... $.getJSON("api.github.com/users/githubuser/events") 工作正常比如说我的桌面上的一个测试服务器(如果我通过 Chrome 开发者控制台进行的话,甚至可以从我的其他网站)但是当我在将该网站上传到 Amazon S3 后尝试进行相同的调用时,它不起作用,因为我得到 XMLHttpRequests 错误。从逻辑上讲,这表明它与我在 Amazon S3 存储桶上的配置有关,因为它确实在测试环境和某些网站中工作?以上是关于Amazon S3 CORS 配置 XMLHttpRequest GET的主要内容,如果未能解决你的问题,请参考以下文章
s3-amazon 图像 CORS 问题(仅在 5-8 小时后发生在少数浏览器中)
Amazon S3 CORS 适用于 HTTP,但不适用于 HTTPS
Amazon S3 CORS 标头仅在 OPTIONS(预检)期间显示,而不在 GET 请求期间显示