AWS S3静态网站为何需启用CORS?同一存储桶跨端点请求疑问
为什么同一S3存储桶的不同端点发起请求需要启用CORS?
这本质是浏览器同源策略在起作用,和是不是同一个S3桶没关系,浏览器只认「协议、域名、端口三者完全匹配」的规则:
- 首先看两个端点的差异:你例子里的S3网站端点是
http://website.s3-website.us-east-1.amazonaws.com,API端点是website.s3.us-east-1.amazonaws.com(哪怕协议一致),二者的域名后缀完全不同(一个是s3-website.us-east-1.amazonaws.com,另一个是s3.us-east-1.amazonaws.com),属于完全不同的源。 - 浏览器的同源策略会拦截跨源的非简单请求——你提到的带认证的GET、PUT就属于这类(因为请求头里带了认证相关的签名信息)。这种情况下,浏览器会先发送一个OPTIONS预检请求,询问目标服务器是否允许当前源的跨域请求。
- 只有当S3存储桶配置了正确的CORS规则,在预检请求的响应里返回了允许当前源(网站端点)、允许对应HTTP方法(GET、PUT)的响应头时,浏览器才会放行后续的实际请求;否则就直接阻止,这就是你看到的现象。
简单说:浏览器不认「背后是同一个桶」这件事,只看请求的两个地址是不是同源,不同源就得走CORS流程。
内容的提问来源于stack exchange,提问作者Woody
相关产品推荐
相关产品推荐

