我的问题的简短版本是:我正在使用亚马逊网络服务托管一个静态网站和一个servlet,我希望在静态网站上发送JavaScript代码发送GET请求到servlet,但我得到“跨源请求被阻止”的错误。这里是长版本:跨域请求在亚马逊网络服务中阻止了错误
我已经在亚马逊的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时,我的控制台中出现“Cross-Origin Request Blocked”错误。我去S3中的应用程序的存储桶,并添加了以下CORS规则:
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
但问题仍然存在。我能做什么?
如果我正确地理解了你的话,你的HTML文件将托管在你的S3存储桶中。并且您希望使用这些(静态?)页面向Elastic Beanstalk上的servlet发送GET请求? – 2014-09-19 04:54:43
@isim我有两个单独的S3存储桶:一个包含一个包含我的所有JavaScript代码的index.html文件,另一个包含带有我的servlet代码的.war文件(将我的servlet上载到我的Elastic Beanstalk应用程序时生成)。包含index.html(包含javascript代码的静态页面)的存储桶被称为“example.com”,包含我的Elastic Beanstalk应用程序的存储桶在我创建Elastic Beanstalk应用程序时由Amazon命名。 – 2014-09-19 05:51:39