Amazon S3 - 不存在“Access-Control-Allow-Origin”标头

Posted

技术标签:

【中文标题】Amazon S3 - 不存在“Access-Control-Allow-Origin”标头【英文标题】:Amazon S3 - No 'Access-Control-Allow-Origin' header is present 【发布时间】:2018-07-27 03:04:33 【问题描述】:

这似乎是 *** 上的热门话题,但我还没有找到解决问题的方法。我正在使用WavesurferJS 从 S3 存储桶中获取音频并在播放曲目时生成波形。

现在,每次我在曲目上按播放时,歌曲开始播放,但波形没有开始生成,我得到了臭名昭著的 Failed to load http://s3bucket-url.com: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://production.env.com' is therefore not allowed access.

我试图摆弄 S3 存储桶上的 CORS 设置,目前看起来像这样

<CORSConfiguration>
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>HEAD</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>Authorization</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

我也试过在AllowedOrigin中添加我们生产环境的url,但是好像没有效果。

在从存储桶中获取流文件的 php 文件中,我还添加了 header("Access-Control-Allow-Origin: *");

无论我使用的浏览器如何,都会弹出此案例。

【问题讨论】:

为什么(什么上下文)需要授权?您在 GET 之前看到 OPTIONS 请求吗? 嘿 Kleioz,我实际上不需要授权。就像我最近在下面所说的那样,它就是我的配置现在的样子。我尝试了许多不同的方法来克服 CORS 错误,方法是删除或添加 Auth 以及其他设置,但没有任何运气。 好的,但是您绝对应该看看您的 OPTIONS 请求是如何处理的。您的浏览器应在 GET 尝试之前指示 OPTIONS 请求。我目前对 S3 的 CORS 配置的了解(请注意,我从未使用过 S3 并且对此一无所知)是您允许带有 Authorization 标头的 GET 请求。我没有看到您允许 OPTIONS 请求,并且您应该回答“Access-Control-Allow-Origin:*”以及 Method 和 Custom 标头。 【参考方案1】:

可能是预检 OPTIONS 请求正在通过授权过程。有什么方法可以禁用 OPTIONS 请求的授权(当然,如果您使用的是授权)?

【讨论】:

嘿,Rory,老实说,我真的不需要授权,现在构建 xml 配置的方式只是我尝试克服 CORS 错误的 20 种不同方式之一。我也尝试过使用/不使用身份验证,但没有运气。

以上是关于Amazon S3 - 不存在“Access-Control-Allow-Origin”标头的主要内容,如果未能解决你的问题,请参考以下文章

从 Amazon AWS s3 存储桶错误获取 Html5:请求的资源上不存在“Access-Control-Allow-Origin”标头

Amazon S3 存储桶大文件上传

无法从 Amazon S3 下载具有特殊字符的文件

Amazon S3 数据一致性模型

使用预签名 URL 将文件上传到 Amazon S3 时出现 CORS 错误

Amazon S3 - 不允许的方法