AWS S3 - No' Access-Control-Allow-Origin'标头出现在请求的资源上

时间:2015-07-22 13:23:13

标签: amazon-web-services amazon-s3 cors

我在S3(app.foo.org)上有一个客户端静态网站,向在Elastic Beanstalk(www.foo.org)上运行的Web应用程序发送http请求。

S3 Web应用程序配置为:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

在S3应用程序中,我为CORS设置了http标头。 在服务器上,我将响应标头设置如下:

httpResponse.setHeader("Access-Control-Allow-Origin", "*"); 
httpResponse.setHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
httpResponse.setHeader("Access-Control-Allow-Headers", "X-Requested-With, Content-Type");

一切都运行良好,但是在S3上通过&#34; aws async&#34;上传新版本的静态网站时命令,它停止工作!我收到以下错误:

XMLHttpRequest cannot load http://www.foo.org/rest/... 

否&#39;访问控制 - 允许 - 来源&#39;标头出现在请求的资源上。起源&#39; http://app.foo.org&#39;因此不允许访问。响应的HTTP状态代码为500。

I tried changing the CORSRules: for instance to replace:

    <AllowedOrigin>*</AllowedOrigin>
with:
    <AllowedOrigin>http://*</AllowedOrigin>
    <AllowedOrigin>https://*</AllowedOrigin>

我尝试了许多其他的建议,我找不到......没有任何作用......任何想法可能出错?

1 个答案:

答案 0 :(得分:2)

我发现了这个错误!

客户端正在发送http请求,而在服务器端,我将所有即将到来的http://www.foo.org请求转换为https://www.foo.org并将其发回,并期望客户端向我发送https请求。

所以我只是设置客户端发送https请求,现在一切正常!