AWS 控制台中的 CORS 配置不起作用

Posted

技术标签:

【中文标题】AWS 控制台中的 CORS 配置不起作用【英文标题】:CORS Configuration in AWS console not working 【发布时间】:2017-07-10 14:14:28 【问题描述】:

我有一些 javascript 试图向 AWS 上托管的服务器上的 RSS 提要发出 ajax 请求,发出请求时收到以下错误消息:

XMLHttpRequest cannot load http://www.domain.com/feed. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://xxx.compute.amazonaws.com' is therefore not allowed access.

我检查了请求标头,Origin 标头在那里。

然后我更新了服务器上的 CORS 配置,用于将 ajax 请求发送到的 AWS 存储桶:

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

我还尝试了其他一些不同的变体,但它们似乎都没有什么不同,我的浏览器仍然给出相同的 CORS 错误消息。当我安装 Chrome 扩展程序以禁用 CORS 保护时,代码运行良好,所以似乎只有 CORS 问题阻止了它的工作。

有谁知道为什么 AWS 中存储桶的 CORS 配置不起作用,或者为什么配置可能有误?

我已经尝试了几天,但我找到的所有答案都是人们没有意识到您需要允许跨域共享外部域,或者关于如何在 AWS 上配置 CORS 的基本教程,但我正在关注那些正是,它似乎没有什么区别。

【问题讨论】:

会不会是浏览器在您配置 CORS 之前缓存了对象,所以实际上并没有尝试再次加载它? @Michael-sqlbot 我已经在不同的浏览器中尝试过并清除了缓存,浏览器似乎不是问题,我怀疑它在AWS/服务器端。 你有没有弄清楚这里发生了什么?我似乎有同样的问题。我有两个存储桶,用于两个应用程序,每个应用程序都具有完全相同的 CORS 配置(Origin 中的域名除外),但其中一个应用程序能够成功发出请求,而另一个应用程序被拒绝。奇怪的是,我试图替换的配置是&lt;AllowedOrigin&gt;*&lt;/AllowedOrigin&gt;。在将其更改为实际来源失败后,在将其更改回通配符后,我什至无法使其再次工作。就好像 AWS 无法识别最新文件一样。 @jprince 我已经用我的问题的答案更新了帖子,希望它对你有帮助。 @chris 感谢您的更新。我真的不喜欢允许任何来源发布到我的存储桶的想法,所以我可能会就此与亚马逊联系。如果有什么问题我会报告的。 【参考方案1】:

我能够通过将以下内容添加到我的存储桶的 CORS 配置来解决此错误:

<AllowedMethod>HEAD</AllowedMethod>

完整配置:

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

【讨论】:

【参考方案2】:

我无法让它适用于特定来源,我仍然需要查看它,但以下配置可以满足我的需要。

<?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>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>

【讨论】:

以上是关于AWS 控制台中的 CORS 配置不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Sails.js 全局 CORS 配置不起作用,每条路线是

使用 CORS 标头时,$.get 在 IE 中不起作用

同一视图控制器中的 AWS AppSync 多个订阅不起作用 - iOS Swift

CORS 配置不起作用

画布上的 CORS 在 Chrome 和 Safari 上不起作用

Spring CORS 控制器注释不起作用