【发布时间】: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 命名。