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/
希望这可以帮助!
试试这些:
- 尝试缩小要允许访问的域名的范围。 S3不喜欢
*
。 - CloudFront + S3 doesn't handle the CORS configuration correctly开箱即用。 kludge将附加包含引用域名称的查询字符串,并在CloudFront分配设置中明确启用对查询字符串的支持。
您测试CORS的方式有一些问题。
- 您的CORS配置没有HEAD方法。
- 你的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 + CloudFront CORS 问题
使用 Amazon S3 和 Cloudfront 的 CORS
我们如何为 Amazon S3 存储桶中的文件夹设置 CORS