Amazon S3是否需要时间来更新CORS设置?多久?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Amazon S3是否需要时间来更新CORS设置?多久?相关的知识,希望对你有一定的参考价值。

最近我启用了Amazon S3 + CloudFront作为我的rails应用程序的CDN。为了使用字体资源并在Firefox或IE中显示它们,我必须在我的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>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

然后我用curl -I https://small-read-staging-assets.s3.amazonaws.com/staging/assets/settings_settings-312b7230872a71a534812e770ec299bb.js.gz,我得到:

HTTP/1.1 200 OK
x-amz-id-2: Ovs0D578kzW1J72ej0duCi17lnw+wZryGeTw722V2XOteXOC4RoThU8t+NcXksCb
x-amz-request-id: 52E934392E32679A
Date: Tue, 04 Jun 2013 02:34:50 GMT
Cache-Control: public, max-age=31557600
Content-Encoding: gzip
Expires: Wed, 04 Jun 2014 08:16:26 GMT
Last-Modified: Tue, 04 Jun 2013 02:16:26 GMT
ETag: "723791e0c993b691c442970e9718d001"
Accept-Ranges: bytes
Content-Type: text/javascript
Content-Length: 39140
Server: AmazonS3

我应该在哪里看到'Access-Control-Allow-Origin'? S3是否需要时间来更新CORS设置?如果缓存它们,我可以强制过期标头吗?

答案

尝试发送Origin标头:

$ curl -v -H "Origin: http://example.com" -X GET https://small-read-staging-assets.s3.amazonaws.com/staging/assets/settings_settings-312b7230872a71a534812e770ec299bb.js.gz > /dev/null

然后输出应显示您正在寻找的CORS响应头:

< Access-Control-Allow-Origin: http://example.com
< Access-Control-Allow-Methods: GET
< Access-Control-Allow-Credentials: true
< Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method

有关如何使用cURL调试CORS请求的其他信息,请访问:How can you debug a CORS request with cURL?

请注意,有不同类型的CORS请求(简单和预检),关于差异的一个很好的教程可以在这里找到:http://www.html5rocks.com/en/tutorials/cors/

希望这可以帮助!

另一答案

试试这些:

  1. 尝试缩小要允许访问的域名的范围。 S3不喜欢*
  2. CloudFront + S3 doesn't handle the CORS configuration correctly开箱即用。 kludge将附加包含引用域名称的查询字符串,并在CloudFront分配设置中明确启用对查询字符串的支持。
另一答案

您测试CORS的方式有一些问题。

  1. 您的CORS配置没有HEAD方法。
  2. 你的curl命令没有-H头。

我可以通过使用curl来获取您的数据,如下所示。然而,他们将垃圾倾倒在我的屏幕上,因为您的数据是压缩二进制的

curl --request GET  https://small-read-staging-assets.s3.amazonaws.com/staging/assets/settings_settings-312b7230872a71a534812e770ec299bb.js.gz -H "http://google.com"
另一答案

要回答标题中的实际问题:

不,S3似乎没有花时间来传播CORS设置。 (截至2019年)

但是,如果您使用Chrome(可能还有其他人),则浏览器可能会缓存CORS设置,因此如果您只是进行普通的浏览器刷新,则不一定会看到您所期望的更改。而是右键单击刷新按钮并选择“清空缓存和硬重新加载”(从Chrome 73开始)。然后,新的CORS设置将在AWS控制台中进行更改的<~5秒内生效。 (它可能比这快得多。没有经过测试。)这适用于普通的S3存储桶。我不知道CloudFront如何影响事物。

(我意识到这个问题已经有6年之久了,并且可能涉及其他人早已回答的其他技术问题,但是当你为CORS变化寻找传播时间的简单问题时,这个问题首先出现的是什么,所以我认为它值得一个解决这个问题的答案。)

以上是关于Amazon S3是否需要时间来更新CORS设置?多久?的主要内容,如果未能解决你的问题,请参考以下文章

Amazon S3 CORS 错误

Amazon S3 + CloudFront CORS 问题

使用 Amazon S3 和 Cloudfront 的 CORS

我们如何为 Amazon S3 存储桶中的文件夹设置 CORS

Amazon S3 中的 Angular CORS(无服务器)

Amazon S3 CORS 仍然无法正常工作:没有“访问控制允许来源”