ChatGPT解决这个技术问题 Extra ChatGPT

S3 - 访问控制允许来源标头

有人设法将 Access-Control-Allow-Origin 添加到响应标头吗?我需要的是这样的:

<img src="http://360assets.s3.amazonaws.com/tours/8b16734d-336c-48c7-95c4-3a93fa023a57/1_AU_COM_180212_Areitbahn_Hahnkoplift_Bergstation.tiles/l2_f_0101.jpg" />

此获取请求应包含在响应、标头、Access-Control-Allow-Origin: *

我的存储桶 CORS 设置如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

正如您所料,没有 Origin 响应标头。

其中缺少的一件事是: Access-Control-Allow-Origin
但是,在我的情况下,这不是必需的,如果您使用它,由于云端缓存,它似乎一开始就不起作用。

O
Owen Blacker

通常,您需要做的就是在您的存储桶属性中“添加 CORS 配置”。

https://i.stack.imgur.com/acAvH.png

<CORSConfiguration> 带有一些默认值。这就是我解决你的问题所需要的。只需单击“保存”,然后再试一次,看看它是否有效。如果没有,您也可以尝试下面的代码(来自 alxrb 答案),这似乎对大多数人都有效。

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>HEAD</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>Authorization</AllowedHeader>
    </CORSRule>
</CORSConfiguration> 

有关详细信息,您可以阅读 Editing Bucket Permission 上的这篇文章。


这似乎是可能的。尝试阅读上面的链接(在答案中)或直接阅读这个链接:docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTcors.html
谢谢你。只需单击保存即可加载我的字体。
我注意到它有时会起作用,有时在编辑后我仍然会收到浏览器错误。不确定是 CloudFlare 还是 S3。
您可能需要将 HEAD 添加到 AllowedMethod
对我不起作用。在 HEAD 或 GET 请求的响应中仍然没有“Access-Control-Allow-Origin”标头。
c
coderVishal

S3 现在期望规则在数组 Json format.

您可以在 s3 存储桶中找到它 -> 权限然后 -> 向下滚动 -> () 跨域资源共享 (CORS)

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "GET",
            "HEAD"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": [],
        "MaxAgeSeconds": 3000
    }
]

非常感谢。这甚至在文档中的某处进行了描述吗?我最近看不到任何东西:docs.aws.amazon.com/AmazonS3/latest/dev/…
不确定,如果这在几天前存在,但在撰写本文时 the docs 显示:重要在新的 S3 控制台中,CORS 配置必须是 JSON。
这是最新的解决方案,AWS 自动更新了我的 CORS 配置,错过了破坏我网站的“HEAD”属性。不错的一个!
这应该是公认的答案。因为旧的接受的答案现在已经过时了。
我不得不向下滚动这么远才能得到这个答案,这太疯狂了。请点赞,这是正确的解决方案!
O
Owen Blacker

我在加载网络字体时遇到了类似的问题,当我在存储桶属性中单击“添加 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>HEAD</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>Authorization</AllowedHeader>
    </CORSRule>
</CORSConfiguration> 

我只是点击了保存,它很有效,我的自定义网络字体正在加载到 IE 和 Firefox 中。我不是这方面的专家,我只是认为这可能会对你有所帮助。


谢谢!这为我做到了。我点击“添加 CORS 配置”,但没有意识到我必须点击“保存”,因为我认为我正在查看默认配置。哦。
我必须设置 <AllowedHeader>*</AllowedHeader> 才能工作(最好只在这样做时为您的网站制定新规则)
@parliament 在那里具有魔力,因为在将 设置为通配符之前,上述所有其他设置都没有起作用。欢呼。
我去了 CORS 设置并在那里找到了相同的设置,但是当我点击保存时 * 变得活跃。以前不是。
就是这样,点击保存
e
eremzeit

如果您的请求未指定 Origin 标头,S3 将不会在响应中包含 CORS 标头。这真的让我很震惊,因为我一直在尝试卷曲文件以测试 CORS,但卷曲不包括 Origin


自 2 周以来,我一直在浏览互联网,所有文章和答案都在谈论更改我按照他们所说的那样做的 S3 CORS 配置,但响应没有改变,直到我看到你的答案对我来说有意义,我使用它进行了测试邮递员及其工作!非常感谢
任何人都知道如何我可以更改 img 标记的标头吗?我无法发送不同的标头,浏览器发送请求
OMG 它在任何地方都有记录吗?
它是:) docs.aws.amazon.com/AmazonS3/latest/dev/… >验证请求是否具有 Origin 标头。如果缺少标头,Amazon S3 不会将请求视为跨域请求,并且不会在响应中发送 CORS 响应标头。
有没有办法在不指定来源的情况下强制包含 CORS 标头?
S
Senica Gonzalez

@jordanstephens 在评论中这么说,但它有点迷路了,对我来说是一个非常容易解决的问题。

我只是添加了 HEAD 方法并单击保存并开始工作。

* GET HEAD 3000 授权


是的。当从 AWS S3 获取字体等内容时,这修复了 Chrome 中的“No 'Access-Control-Allow-Origin' header”错误。
是的!太感谢了。允许 HEAD 方法成功了。
C
Community

这是完成这项工作的一种简单方法。

我知道这是一个老问题,但仍然很难找到解决方案。

首先,这适用于我使用 Rails 4、Paperclip 4、CamanJS、Heroku 和 AWS S3 构建的项目。

您必须使用 crossorigin: "anonymous" 参数请求您的图像。

    <img href="your-remote-image.jpg" crossorigin="anonymous"> 

将您的站点 URL 添加到 AWS S3 中的 CORS。这是来自亚马逊的参考资料。差不多,只需转到您的存储桶,然后从右侧的选项卡中选择“属性”,打开“权限”选项卡,然后单击“编辑 CORS 配置”。最初,我将 设置为 *。只需更改那个星号到您的 URL,请务必在单独的行中包含诸如 http:// 和 https:// 之类的选项。我期待星号接受“全部”,但显然我们必须比这更具体。

这就是我的样子。

https://i.stack.imgur.com/wFYQK.png


与公认的答案不同,这确实有效!甚至加载此 S3 的 ClaudFront CDN 也在复制这些标头。谢谢老兄救了我几个小时!
感谢@Kunal 的链接。 CloudFront 为这个等式增加了一层复杂性。
我已经了解了 <img> 上的 MDN 文档,但我错误地只输入了 crossOrigin="true"。谢谢你!
哇,这实际上对我有用!我可以在 localhost 上使用它,甚至可以使用星号,关键是只需将 crossorigin="anonymous" 添加到我的 html 元素中:D
d
dansch

见上面的答案。 (但我也有一个 chrome bug)

不要在 CHROME 中加载和显示页面上的图像。 (如果您要稍后创建一个新实例)

就我而言,我加载了图像并将它们显示在页面上。当它们被点击时,我创建了它们的一个新实例:

// there is already an html <img /> on the page, I'm creating a new one now
img = $('<img crossorigin />')[0]
img.onload = function(){
  context.drawImage(img, 0, 0)
  context.getImageData(0,0,w,h)
}
img.src = 'http://s3.amazonaws.com/my/image.png'; // I added arbitrary ?crossorigin to change the URL of this to fix it

Chrome 已经缓存了另一个版本,并且从未尝试重新获取 crossorigin 版本(即使我在显示的图像上使用了 crossorigin

为了解决这个问题,我在为画布加载图像 url 时将 ?crossorigin 添加到了图像 url 的末尾(但您可以添加 ?blah,更改缓存状态是任意的)。如果您找到更好的解决方法,请告诉我对于铬


缓存也被证明是我的问题(在我尝试了接受的答案之后)。谢谢你。
Chrome上也有缓存问题。轻松修复:工具/设置>清除浏览数据...>缓存的图像和文件尽管可能面临此问题的用户可能需要另一种解决方案。
感谢您的回答!我在 Chrome 上遇到了同样的问题,但没有找到答案。
如果 CORS 有问题,所有人都需要尝试这个!拯救我的一天!
t
tilde

我将添加到this answer - 上面 - 它解决了我的问题。

要将 AWS/CloudFront 分发点设置为指向 CORS Origin Header,请单击分发点的编辑界面:

https://i.stack.imgur.com/2JAj3.png

转到行为选项卡并编辑行为,将“基于选定请求标头的缓存”从无更改为白名单,然后确保将 Origin 添加到白名单框中。有关更多信息,请参阅 AWS 文档中的 Configuring CloudFront to Respect CORS Settings

https://i.stack.imgur.com/IGvqg.png


您必须设置哪些允许的 HTTP 方法?
你的意思是像 GET、POST、DELETE 等等......?请求的对象在哪里?
您能否重新表述您的问题,以便我了解您是指 cf web 表单还是请求 s3 资源的应用程序?如果是前者,这里的文档中提到了一个 HTTP 方法选项 docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/…
好像您在问必须在 AWS 中设置什么 HTTP Request Methods。对于这个问题,我认为不需要在任何地方设置。如果您在应用程序中谈论请求资源,我相信您只会通过它的 url string 请求文件:即图像、视频、音频文件。
那是缺少的一块!谢谢你!我尝试了上面的所有答案,只有在将这些标题列入白名单后,它才在 localhost 上对我有用
v
veuncent

我在将 3D 模型从 S3 加载到 javascript 3D 查看器 (3D HOP) 时遇到了类似的问题,但奇怪的是只有某些文件类型 (.nxs)。

为我解决的问题是将 CORS 配置中的 AllowedHeader 从默认的 Authorization 更改为 *

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

需要在 2017 年 10 月为 Chrome 设置像这样带星号的 <AllowedHeader>*</AllowedHeader>。非常感谢! (另外,设置后不要忘记清除浏览器缓存)。
小点 - 我认为您不需要更改 AllowedHeader。我在这里也遇到了同样的问题,但事实证明是浏览器缓存了先前的响应(MaxAgeSeconds)。在 DevTools 设置中,您可以在控制台打开时忽略缓存。完成后,它开始为我工作
AllowedHeader>*< 绝对为我解决了这个问题。它可能仅适用于通过特定 xhr 库发送请求时?我正在使用 Axios 并发现它是必要的。
T
Tonio

就像其他人所说的那样,您首先需要在 S3 存储桶中进行 CORS 配置:

<CORSConfiguration>
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>HEAD</AllowedMethod> <!-- Add this -->
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>

但就我而言,这样做之后,它仍然无法正常工作。我使用的是 Chrome(可能与其他浏览器相同的问题)。

问题是 Chrome 正在缓存带有标头的图像(不包含 CORS 数据),因此无论我尝试在 AWS 中更改什么,我都不会看到我的 CORS 标头。

清除 Chrome 缓存并重新加载页面后,图像具有预期的 CORS 标头


谢谢!这个缓存问题让我发疯了。对于想知道如何在 Chrome(版本 73)上轻松清除缓存的任何人,请右键单击重新加载按钮并选择“清空缓存和硬重新加载”。然后,您将在不到 5 秒的时间内看到您对 S3 CORS 所做的任何更改的效果。 (也许更快 - 这就是我切换浏览器选项卡所需的时间。)
这是我的问题。我的存储桶具有适当的 CORS 配置,我的浏览器非常高效🤪谢谢。
s
shim

我尝试了上面的所有答案,但没有任何效果。实际上,我们需要将上述答案中的 3 个步骤结合在一起才能使其发挥作用:

正如弗拉维奥所建议的;在您的存储桶上添加 CORS 配置: * GET 在图像上;提及 crossorigin: 你在使用 CDN 吗?如果一切正常,连接到源服务器但不是通过 CDN;这意味着您需要在 CDN 上进行一些设置,例如接受 CORS 标头。具体设置取决于您使用的 CDN。


感谢 CDN 部分非常重要,您能否添加 CDN 级别所需内容的详细信息?
B
Brad

我到达了这个线程,但上述解决方案都不适用于我的案例。事实证明,我只需从存储桶的 CORS 配置中的 <AllowedOrigin> URL 中删除一个尾部斜杠。

失败:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>http://www.mywebsite.com/</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

胜出:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>http://www.mywebsite.com</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

我希望这可以节省一些人的头发。


C
Christian Saavedra

首先,在您的 S3 存储桶中激活 CORS。使用此代码作为指导:

<CORSConfiguration>
 <CORSRule>
   <AllowedOrigin>http://www.example1.com</AllowedOrigin>

   <AllowedMethod>PUT</AllowedMethod>
   <AllowedMethod>POST</AllowedMethod>
   <AllowedMethod>DELETE</AllowedMethod>

   <AllowedHeader>*</AllowedHeader>
 </CORSRule>
 <CORSRule>
   <AllowedOrigin>http://www.example2.com</AllowedOrigin>

   <AllowedMethod>PUT</AllowedMethod>
   <AllowedMethod>POST</AllowedMethod>
   <AllowedMethod>DELETE</AllowedMethod>

   <AllowedHeader>*</AllowedHeader>
 </CORSRule>
 <CORSRule>
   <AllowedOrigin>*</AllowedOrigin>
   <AllowedMethod>GET</AllowedMethod>
 </CORSRule>
</CORSConfiguration>

2)如果它仍然不起作用,请确保在您的 img 标签中添加一个带有“*”值的“crossorigin”。把它放在你的 html 文件中:

  let imagenes = document.getElementsByTagName("img");
    for (let i = 0; i < imagenes.length; i++) {
      imagenes[i].setAttribute("crossorigin", "*");

P
Pawel Furmaniak

在 S3 存储桶的权限设置中设置 CORS 配置 * GET 3000 Authorization S3 仅添加 CORS 标头当 http 请求具有 Origin 标头时。 CloudFront 默认不转发 Origin 标头 您需要在 CloudFront 分配的行为设置中将 Origin 标头列入白名单。


P
Pablo García Miranda

我修复了它,写了以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

为什么 <AllowedHeader>*</AllowedHeader> 有效而 <AllowedHeader>Authorization</AllowedHeader> 无效?


D
DIWAKAR

这个配置为我解决了这个问题:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>
    <AllowedMethod>HEAD</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <ExposeHeader>ETag</ExposeHeader>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

我认为此配置与此问题中许多其他答案的配置之间几乎没有区别。在发布此配置之前,是否尝试过使用旧答案的配置?
P
Prem Chavhan

请在更新 CORS 配置后清理浏览器的缓存。我在使用strapi时清理缓存后工作


还检查 dev.to/tomspencerlondon/… 这个博客非常有用
嗨@PremChavhan - 欢迎来到堆栈溢出 - 看起来这个答案中的大部分内容可能已经包含在其他 26 个(高度评价的)答案中。如果您认为您的答案确定了新内容,则可以编辑与其相关的评分最高的答案(或添加评论),以将这个新想法带到最前沿。
M
Mich. Gio.

fwuensche "answer" 正确设置 CDN;这样做,我删除了 MaxAgeSeconds。

<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedHeader>Authorization</AllowedHeader>
</CORSRule>

h
hackel

在最新的 S3 管理控制台中,当您单击权限选项卡上的 CORS 配置时,它将显示默认的示例 CORS 配置。但是,此配置实际上并未激活!您必须先单击保存才能激活 CORS。

我花了很长时间才弄清楚这一点,希望这可以节省一些时间。


P
Philip Murphy

警告 - 黑客。

如果您使用 S3Image 显示图像并随后尝试通过 fetch 获取它,可能将其插入 PDF 或进行其他处理,请注意 Chrome 将缓存不需要 CORS 预检请求的第一个结果,并且然后尝试在没有预检 OPTIONS 请求的情况下获取相同的资源,并且由于浏览器限制而失败。

解决此问题的另一种方法是确保 S3Image 包含 crossorigin: 'use-credentials',如上所述。在您使用 S3Image 的文件中,(我有一个创建 S3Image 缓存版本的组件,所以这对我来说是完美的地方),覆盖 S3Image 的原型 imageEl 方法以强制它包含此属性。

S3Image.prototype.imageEl = function (src, theme) {
    if (!src) {
        return null;
    }
    var selected = this.props.selected;
    var containerStyle = { position: 'relative' };
    return (React.createElement("div", { style: containerStyle, onClick: this.handleClick },
        React.createElement("img", { crossOrigin: 'use-credentials', style: theme.photoImg, src: src, onLoad: this.handleOnLoad, onError: this.handleOnError}),
        React.createElement("div", { style: selected ? theme.overlaySelected : theme.overlay })));
};

403 问题现已解决。多么痛苦啊!


R
Rudolf B
<AllowedOrigin>*</AllowedOrigin>

这不是一个好主意,因为使用 * 您授予任何网站访问您存储桶中文件的权限。相反,您应该指定确切允许哪个源使用您的存储桶中的资源。通常,这是您的域名,例如

<AllowedOrigin>https://www.example.com</AllowedOrigin>

或者如果您想包含所有可能的子域:

<AllowedOrigin>*.example.com</AllowedOrigin>

G
Gaurang Sondagar

以下是配置,对我来说很好。我希望它有助于解决您在 AWS S3 上的问题。

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>
    <ExposeHeader>ETag</ExposeHeader>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

这对我很有用,然后我通过删除不需要的方法来加强安全性,并将其指定为我想要的标题
R
Renish Gotecha

就我而言,我首先使用以下配置解决它,转到权限,然后转到跨域资源共享(CORS),然后单击编辑并粘贴以下代码...

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "PUT",
            "POST",
            "DELETE"
        ],
        "AllowedOrigins": [
            "http://www.example1.com"
        ],
        "ExposeHeaders": []
    },
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "PUT",
            "POST",
            "DELETE"
        ],
        "AllowedOrigins": [
            "http://www.example2.com"
        ],
        "ExposeHeaders": []
    },
    {
        "AllowedHeaders": [],
        "AllowedMethods": [
            "GET"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": []
    }
]

点击 here 了解更多信息


T
TigerBear

接受的答案有效,但似乎如果您直接访问资源,则没有跨域标头。如果您使用的是 cloudfront,这将导致 cloudfront 缓存没有标头的版本。当您转到加载此资源的其他 url 时,您将收到此跨域问题。


A
Alexander

如果您的 CORS 设置对您没有帮助。

验证配置 S3 是否正确。我在 Storage.configure 中有一个无效的存储桶名称。我使用了一个简短的存储桶名称,它导致了一个错误:

请求的资源上不存在“Access-Control-Allow-Origin”标头。


Y
Yossi Vainshtein

对于它的价值,我遇到了类似的问题 - 在尝试添加特定的允许来源(不是 *)时。

原来我不得不纠正

<AllowedOrigin>http://mydomain:3000/</AllowedOrigin>

<AllowedOrigin>http://mydomain:3000</AllowedOrigin>

(注意 URL 中的最后一个斜杠)

希望这可以帮助某人


A
Arun K

上面的大多数答案都不起作用。我试图使用 react-s3 将图像上传到 S3 存储桶,我得到了这个

跨域请求被阻止

错误。

您所要做的就是在 s3 Bucket 中添加 CORS Config 转到 S3 Bucket -> Persmission -> CORS Configuration 并粘贴以下内容

<CORSConfiguration>
 <CORSRule>
   <AllowedOrigin>*</AllowedOrigin>

   <AllowedMethod>PUT</AllowedMethod>
   <AllowedMethod>POST</AllowedMethod>
   <AllowedMethod>DELETE</AllowedMethod>

   <AllowedHeader>*</AllowedHeader>
 </CORSRule>
 <CORSRule>
   <AllowedOrigin>*</AllowedOrigin>

   <AllowedMethod>PUT</AllowedMethod>
   <AllowedMethod>POST</AllowedMethod>
   <AllowedMethod>DELETE</AllowedMethod>

   <AllowedHeader>*</AllowedHeader>
 </CORSRule>
 <CORSRule>
   <AllowedOrigin>*</AllowedOrigin>
   <AllowedMethod>GET</AllowedMethod>
 </CORSRule>
</CORSConfiguration>

将 * 替换为您的网站网址。参考:AWS CORS Settings


S
Serhii Popov

我遇到了类似的问题,coderVishal's answer 帮助我解决了这个问题,但就我而言,我需要使用 Terraform 和下一个配置:

resource "aws_s3_bucket" "bucket" {
  bucket = var.bucket
  acl    = "public-read"

  # Cross-origin resource sharing (CORS)
  cors_rule {
    allowed_headers = ["*"]
    allowed_methods = ["GET", "HEAD"]
    allowed_origins = ["*"]
    expose_headers  = []
    max_age_seconds = 3000
  }
}

在文档中阅读有关 cors_rule 参数的更多信息。


S
Sage

对我来说,不添加区域

const s3 = new aws.S3({ apiVersion: '2006-03-01', region: 'us-west-2' });