我的问题的简短版本是:我使用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 spat作为响应。我已经使用存储在本地计算机上的示例JSON输出测试了JavaScript代码,它运行正常。
问题是,当我尝试让脚本通过GET请求获取JSON时,我的控制台出现“Cross-Origin Request Blocked”错误。我在S3中访问了我的应用程序,并添加了以下CORS规则:
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
但问题仍然存在。我该怎么办?
答案 0 :(得分:2)
你已经倒退了。如果您尝试将连接到另一个域的S3托管静态网站,则会使用S3 CORS规则。
在您的情况下,您实际上是在尝试将从S3托管的静态网站连接到另一个域,因此需要通过该域上运行的应用程序发送CORS标头(由您的Elastic Beanstalk应用程序)。