我需要从S3检索一些可公开访问的文件。
这是我的S3 CORS配置:
Server/API
这是我的JS代码:
<?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>
它有效,但并非总是如此。有时我在控制台中出现以下错误:
CORS策略已阻止从来源“ https://my-bycketuel/file.jpg”访问“ https://my.host”处的XMLHttpRequest:请求的资源上没有“ Access-Control-Allow-Origin”标头。
但是在我重新加载页面(有时几次,有时只是一次)之后,错误消失了,我能够读取响应对象。
答案 0 :(得分:2)
在这里
我一直在用Chrome开发工具查看成功和失败的请求。我发现不成功的请求的状态码为200 OK (from disk cache)
,成功的请求的状态码为200 OK
当我使用cache: 'no-cache'
禁用缓存时,问题就消失了。
const response = await fetch(url, {
method: 'GET',
mode: 'cors',
cache: 'no-cache',
headers: {
Origin: window.location.origin,
},
});
我仍然不明白为什么缓存的请求会遭受CORS问题的困扰,但至少我找到了解决方案-或更确切地说,是一种解决方法。
//编辑:
我发现我并不孤单:Cached non CORS response conflicts with new CORS request
答案 1 :(得分:0)
您似乎错过了
<AllowedMethod>Head</AllowedMethod>
在您的配置文件上。
我希望这是您遇到问题的原因。
确保在允许的Http方法中选择了Get,Head,Options以及在白名单上包括Access-Control-Allow-Methods,Access-Control-Allow-Origin和Origin
尝试一下!
祝你好运