aws-sdk抱怨实际存在的cors头缺失

问题描述:

使用webpack运行开发服务器,我试图列出S3存储桶中的项目,并在浏览器中使用javascript aws-sdk控制台输出结果。aws-sdk抱怨实际存在的cors头缺失

这样做时,我得到这个错误:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://bucketname.s3.amazonaws.com/?list-type=2&max-keys=2. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing). 

但是我有一个头在的WebPack开发服务器的配置设置,以证明:

curl -I http://localhost:8080 

HTTP/1.1 200 OK 
X-Powered-By: Express 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH, OPTIONS 
Access-Control-Allow-Headers: X-Requested-With, content-type, Authorization 
X-Content-Type-Options: nosniff 
Content-Type: text/html; charset=utf-8 
Content-Length: 7170 
Vary: Accept-Encoding 
Date: Sat, 02 Dec 2017 16:15:04 GMT 
Connection: keep-alive 

所以,我想*的一切:

HTTP/1.1 404 Not Found 
X-Powered-By: Express 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: * 
Access-Control-Allow-Headers: * 

如果标题在那里,错误是说它的缺失,它可以是授权的东西吗?

如果它确实是标题设置,如果标题实际存在,下一步是什么?

最新通报****

1:添加CORS S3上设置,虽然我相信它的头抱怨不会在S3:

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

也斗不公开或启用静态主机。

2:这工作:

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

从URL被标记的答案给出

+0

它抱怨在S3桶CORS设定阻塞该请求。它与你的dev服务器上的CORS配置无关。您需要在下面的答案中的链接之后,在S3存储桶上配置CORS。 –

+0

@MarkB id有兴趣学习如何正确读取错误信息。我对它的阅读完全不同。我认为这将在未来帮助我,除非您同意它有明确的需求。 –

+0

它与错误信息中的措辞较少有关,更多与理解CORS的工作方式有关。当您在托管在另一个域中的网页中包含某些内容时,浏览器会向域中查看是否可以将它们的内容包含在网页中(通过检查CORS标头)。 CORS不是告诉浏览器哪些域可以显示在你的页面中,CORS是告诉浏览器其他域是否可以包含你的内容。因此,您的服务器的CORS配置与您遇到的问题无关,必须在S3上进行配置。 –

希望看完这可以帮助:http://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html

你如何设置你的CORS,是使用XML它文件?

+0

设置在S3上的CORS是默认的,但错误是抱怨我的服务器没有发送正确的头部访问控制 - 允许 - 起源,或者我读错了? –

您在S3存储桶配置上设置了CORS。在AWS管理控制台上登录。去S3桶;在右边你会发现选项

的原因,你的第一个例子没有工作是这个CORS常见的请求头:

<AllowedHeader>Authorization</AllowedHeader> 

Common Request Headers

基本上你有你的CORS策略写入的方式是,所有的请求要求授权标题存在。例如:

Authorization: AWS AWSAccessKeyId:Signature 

的解决方案是将其改为:

<AllowedHeader>*</AllowedHeader> 

How Does Amazon S3 Evaluate the CORS Configuration On a Bucket?

When Amazon S3 receives a preflight request from a browser, it evaluates the CORS configuration for the bucket and uses the first CORSRule rule that matches the incoming browser request to enable a cross-origin request. For a rule to match, the following conditions must be met:

  • 请求的来源头必须的AllowedOrigin元件相匹配。
  • 在预检OPTIONS请求的情况下,请求方法(例如,GET或PUT)或Access-Control-Request-Method标头必须是AllowedMethod元素之一。
  • 预检规范请求中的请求的Access-Control-Request-Headers标头中列出的每个标头必须与AllowedHeader元素相匹配。

Cross-Origin Resource Sharing (CORS)