【发布时间】:2019-11-29 20:47:36
【问题描述】:
问题是当我尝试使用fetch API 获取时,我收到了 cors 错误(响应标头不包含 Access-Control-Allow-Origin)。这是我在 S3 中的 cors 配置 -
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
代码可以在这里找到 - https://codepen.io/sourov0805045/pen/OKVBXM?editors=1111
我检查了响应标头,发现它不包含 Allow-Access-Control-Origin 标头。
但是如果我将它添加到 <img> 标记中,这会正常工作,这非常令人费解。那时响应标头中也没有Access-Control-Allow-Origin,但图像加载正常。
A 已尝试与axios 相同,但没有效果。
请告诉我您对如何解决此问题的建议。
【问题讨论】:
-
如果您在同源上下文中请求对象,然后在跨源上下文中请求对象,则 S3 上的 CORS 会损坏,因为 S3 不会在非 CORS 响应上添加
Vary: Origin响应标头。我在serverfault.com/a/856948/153161 解决了这个缺陷,其中包括对 CloudFront 的引用,但无论是否使用 CloudFront,S3 都是问题的根源。 -
嗨@Michael-sqlbot 我认为我的问题更基本。如果你看到 codepen,你会看到我只是发出一个 fetch 请求,所以它并没有真正使用缓存。此外,该问题在 Firefox 中也可以重现。
-
你已经解决了吗?我现在在您的 codepen 编辑器中单击按钮时得到正确的响应标头:Accept-Ranges: bytes Access-Control-Allow-Methods: GET, POST, PUT, HEAD, DELETE Access-Control-Allow-Origin: * Content -长度:1573767 内容类型:应用程序/八位字节流日期:格林威治标准时间 2019 年 7 月 24 日星期三 19:41:17 ETag:“8e26c03714ab4d8e185c29b1c04639f0” 最后修改时间:2019 年 6 月 26 日星期三 19:18:40 GMT 服务器:AmazonS3 变化:来源,访问控制请求标头,访问控制请求方法 x-amz-id-2:[...] x-amz-request-id:[...]
-
是的,已经解决了,稍后会更新问题。
-
@RasheduzzamanSourov 你有没有机会提供你承诺的更新:D?
标签: javascript amazon-s3 cors axios fetch