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 请求期间显示

Amazon S3 图像在 Chrome 中获取 CORS 错误/错误,在 Firefox 中没有错误

Amazon S3,无法设置 CORS 策略

Amazon S3 + CloudFront CORS 问题