AWS S3未将Origin作为Access-Control-Allow-Origin值返回

时间:2016-08-04 16:29:09

标签: ruby-on-rails-4 amazon-web-services amazon-s3 cors

我正在尝试通过Cloudfront从AWS S3获取对象,但我遇到了CORS问题。

据我所知,我对Cloudfront的请求包含一个标题为Origin的标题,它告诉服务器请求的来源。当Cloudfront请求对象时,S3会根据S3的CORS配置返回对象以及标头。这些标题中有Access-Control-Allow-Origin,它向浏览器指定允许哪些来源访问对象。

我的问题是我需要在CORS配置中支持动态子域,所以我在S3中配置了CORS,如下所示:

<AllowedOrigin>*</AllowedOrigin>

但由于我使用Access-Control-Allow-Credentials: true标题,因此不允许使用通配符。

现在,根据this article,其中指出:

  

换句话说,有两种方法可以与多个Origin共享资源:

     
      
  1. 服务器在HTTP响应标头
  2. 中返回Access-Control-Allow-Origin: *   
  3. 服务器根据HTTP请求标头中指定的Access-Control-Allow-Origin动态生成Origin(这就是S3所做的)
  4.   

S3应该能够查看我的Origin标头并将其值返回为Access-Control-Allow-Origin,从而防止出现与通配符有关的任何错误。但我从S3回来的只是Access-Control-Allow-Origin: *

如何让S3将我的Origin视为Access-Control-Allow-Origin的值?

这篇文章有点旧,所以我想S3自2013年以来已经更新了它们如何处理这些标题,但还有办法吗?

注意:这是使用aws-sdk-ruby V2的rails应用程序

1 个答案:

答案 0 :(得分:1)

我在another question here找到了答案。 S3已更新其工作原理,您现在必须使用以下配置让S3镜像您的Origin

<AllowedOrigin>http://*</AllowedOrigin>
<AllowedOrigin>https://*</AllowedOrigin>