【问题标题】:Cross-Origin Request Blocked error in Amazon Web ServicesAmazon Web Services 中的跨域请求被阻止错误
【发布时间】:2014-11-13 13:23:44
【问题描述】:

我的问题的简短版本是:我正在使用 Amazon Web Services 托管一个静态网站和一个 servlet,我想让静态网站中的 JavaScript 代码向 servlet 发送 GET 请求,但我得到“跨域请求被阻止”错误。这是长版:

我在 Amazon 的 Elastic Beanstalk 上创建并部署了一个 servlet。 servlet 接收 GET 请求,进行一些处理,然后输出 JSON。我使用 Route53 注册了一个域(我们称之为“example.com”)并使用 Route53 为 servlet 创建别名;我们称之为“app.example.com”。

我还使用 S3 和 Route 53 的组合托管了一个静态网页。我能够将 GET 请求发送到 servlet,并通过我域的 S3 存储桶中的 HTML 文档获取响应。我想要做的是在 HTML 文档中包含一些 JavaScript 代码,它通过调用“app.example.com/keyword=somestring”发出 GET 请求,并将 servlet 吐出的 JSON 解析为响应。我已经使用存储在本地计算机上的示例 JSON 输出测试了 JavaScript 代码,它运行良好。

问题是当我尝试让脚本通过 GET 请求获取 JSON 时,我的控制台中出现“跨源请求被阻止”错误。我在 S3 中转到我的应用程序的存储桶并添加了以下 CORS 规则:

<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>

但问题仍然存在。我能做什么?

【问题讨论】:

  • 如果我理解正确,您的 HTML 文件托管在您的 S3 存储桶上。您是否希望使用这些(静态?)页面向 Elastic Beanstalk 上的 servlet 发送 GET 请求?
  • @isim 我有两个单独的 S3 存储桶:一个包含带有我所有 JavaScript 代码的 index.html 文件,另一个包含带有我的 servlet 代码的 .war 文件(当我将我的 servlet 上传到我的Elastic Beanstalk 应用程序)。包含 index.html 的存储桶(一个带有 javascript 代码的静态页面)被称为(为了本示例)“example.com”,包含我的 Elastic Beanstalk 应用程序的存储桶在我创建 Elastic Beanstalk 应用程序时由 Amazon 命名。

标签: amazon-web-services cors


【解决方案1】:

你把这一切都搞反了。如果您尝试从另一个域连接到 S3 托管的静态网站,则使用 S3 CORS 规则。

在您的情况下,您实际上是在尝试将 从 S3 托管的静态网站连接到另一个域,因此 CORS 标头需要由在该域上运行的应用发送(由您的Elastic Beanstalk 应用程序)。

【讨论】:

  • 您是对的:我想从 S3 托管的静态网站连接到我的 Elastic Beanstalk 应用程序。我已将问题中的 CORS 规则添加到“example.com”存储桶和 Elastic Beanstalk 应用存储桶中。您是说我需要向包含 CORS 标头的 servlet(由 Elastic Beanstalk 托管)添加一些代码吗?如果是这样,您能否解释(或提供参考)如何做到这一点?
  • 阅读了这两个链接后,我想我需要在我的 servlet 响应中添加一些 CORS 标头。我仍然对如何做到这一点感到困惑,但是已经很晚了,所以我会在睡一觉后再看一遍。到目前为止,您的评论非常有帮助,如果您有任何进一步的建议,我相信我会很感激他们。
猜你喜欢
  • 2017-12-02
  • 2015-06-08
  • 2015-05-05
  • 2020-11-03
  • 1970-01-01
  • 2021-06-26
  • 2014-10-13
相关资源
最近更新 更多