【发布时间】:2017-12-03 03:16:45
【问题描述】:
使用 webpack 运行开发服务器,我正在尝试列出 S3 存储桶中的项目并使用浏览器中的 javascript aws-sdk 控制台输出结果。
这样做时我收到此错误:
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:在 S3 上添加 CORS 设置,但我相信它抱怨的标头不会出现在 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
【问题讨论】:
-
抱怨 S3 存储桶上的 CORS 配置阻塞了请求。它与您的开发服务器上的 CORS 配置无关。您需要按照以下答案中的链接在 S3 存储桶上配置 CORS。
-
@MarkB 我有兴趣学习如何正确阅读该错误消息。我对它的阅读完全不同。我认为它会在未来对我有所帮助,除非您同意它有明确的需求。
-
这与错误消息中的措辞关系不大,更多的是与理解 CORS 的工作原理有关。当您在网页中包含托管在另一个域上的某些内容时,浏览器会访问该域以查看它们是否可以将其内容包含在您的网页中(通过检查 CORS 标头)。 CORS 不是告诉浏览器可以在您的页面中显示哪些其他域,CORS 是关于告诉浏览器其他域是否可以包含您的内容。因此,您的服务器的 CORS 配置与您遇到的问题无关,它必须在 S3 上进行配置。
标签: amazon-web-services amazon-s3 aws-sdk-js