S3 不返回 Access-Control-Allow-Origin 标头?

2024-05-13

我无法强制 S3 在从存储桶返回的所有对象上设置 CORS 标头,尽管启用了 CORS,但由于客户端 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>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

对象 URL 示例https://s3.amazonaws.com/captionable/meme/test https://s3.amazonaws.com/captionable/meme/test

有谁知道出了什么问题吗?


首先,确保Origin每个请求的标头。如果不Origin标头已发送,S3 不会发送access-control标头,因为 S3 认为它们不相关(通常情况下,它们是不相关的)。浏览器(即 CORS 机制)会自动发送一个Origin通过 XMLHTTPRequest 进行跨域 HTTP 请求时的 header。

如果加载图像img,你需要添加crossorigin="anonymous"属性。看关于跨域属性的 MDN 文档 https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-crossorigin。这将导致浏览器发送一个Origin请求标头就像 XMLHTTPRequest 一样。

根据 Sam Selikoff 的回答,您可能需要更改

 <AllowedOrigin>http://*</AllowedOrigin>

to

 <AllowedOrigin>http://*</AllowedOrigin>
 <AllowedOrigin>https://*</AllowedOrigin>

我没有测试过这个。

按照 Paul Draper 对此答案的评论:注意缓存问题。浏览器可能使用不包含适当内容的缓存响应Access-Control响应标头。在开发过程中,您可以清除缓存。在生产中,如果之前以静态方式使用该资源,则必须切换到该资源的新 URL。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

S3 不返回 Access-Control-Allow-Origin 标头? 的相关文章

随机推荐