Amazon s3 AmazonS3是否需要时间更新CORS设置?多久?

Amazon s3 AmazonS3是否需要时间更新CORS设置?多久?,amazon-s3,ruby-on-rails-3.2,font-face,cors,amazon-cloudfront,Amazon S3,Ruby On Rails 3.2,Font Face,Cors,Amazon Cloudfront,最近,我启用了AmazonS3+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

最近,我启用了AmazonS3+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>

我应该在哪里看到
“访问控制-允许来源”
?S3是否需要时间更新CORS设置?如果邮件头正在缓存,是否可以强制其过期?

尝试发送原始邮件头:

$ 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请求的其他信息,请参见:

请注意,有不同类型的CORS请求(简单和飞行前),可以在这里找到一个关于这些差异的很好的教程:

希望这有帮助

试试这些:

  • 尝试缩小您希望允许访问的域名的范围。S3不喜欢
    *
  • 开箱即用。一个难题是附加一个包含引用域名称的查询字符串,并在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设置,因此如果您只进行普通浏览器刷新,则不一定会看到预期的更改。相反,右键单击刷新按钮并选择“空缓存和硬重新加载”(从Chrome73开始)。然后,新的CORS设置将在中生效。如果您没有看到CORS生效,请确保您已经解决了这些问题。理想情况下,这不应该花费太长时间。我已经看到它需要几分钟的时间了。@Keshi感谢链接的帮助。。。我没有意识到您必须让请求中的Origin标头与指定CORSRule中的至少一个AllowedOrigin元素匹配,才能将其公开到标头中。。。duh:faceslap:你5秒的参考值是多少?@Zulu:我量过了。我可以在一个浏览器选项卡中进行更改,然后立即切换到另一个选项卡,并进行硬重新加载以测试它,并且更改已经传播。这个过程大约需要5秒钟。我没有试着在这个分辨率下测量它。我的水桶是us-east-1,我在旧金山湾区进行测试。
    curl --request GET  https://small-read-staging-assets.s3.amazonaws.com/staging/assets/settings_settings-312b7230872a71a534812e770ec299bb.js.gz -H "http://google.com"