跨域请求到AWS S3的AJAX请求有时会导致CORS错误

时间:2019-03-14 08:44:37

标签: javascript ajax amazon-web-services amazon-s3 cors

我需要从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”标头。

但是在我重新加载页面(有时几次,有时只是一次)之后,错误消失了,我能够读取响应对象。

2 个答案:

答案 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

尝试一下!

祝你好运