【问题标题】:Amazon S3 CORS Configuration XMLHttpRequest GETAmazon S3 CORS 配置 XMLHttpRequest GET
【发布时间】:2013-01-07 07:58:06
【问题描述】:

我正在通过 Amazon S3 托管一个静态网站,并且我有一些 Javascript 可以调用另一个域并解析 XML、JSON 或任何它获取的内容。

我关注了 stackoverflow 上的许多帖子以及与之链接的各种博客帖子,声称可以使其正常工作,但即使在非常密切地关注之后,我也无法复制结果。

 <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?

我觉得我在绕圈子......那里有人有任何线索/建议吗?谢谢。

【问题讨论】:

    标签: javascript amazon-s3 xmlhttprequest amazon cors


    【解决方案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 存储桶上的配置有关,因为它确实在测试环境和某些网站中工作?
        猜你喜欢
        • 1970-01-01
        • 2015-08-02
        • 2017-09-06
        • 2021-02-13
        • 2013-05-03
        • 2016-09-04
        • 1970-01-01
        • 2017-12-30
        • 2012-09-19
        相关资源
        最近更新 更多