我正在尝试通过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共享资源:
- 服务器在HTTP响应标头
中返回Access-Control-Allow-Origin: *
- 服务器根据HTTP请求标头中指定的
醇>Access-Control-Allow-Origin
动态生成Origin
(这就是S3所做的)
S3应该能够查看我的Origin
标头并将其值返回为Access-Control-Allow-Origin
,从而防止出现与通配符有关的任何错误。但我从S3回来的只是Access-Control-Allow-Origin: *
。
如何让S3将我的Origin
视为Access-Control-Allow-Origin
的值?
这篇文章有点旧,所以我想S3自2013年以来已经更新了它们如何处理这些标题,但还有办法吗?
注意:这是使用aws-sdk-ruby V2的rails应用程序
答案 0 :(得分:1)
我在another question here找到了答案。 S3已更新其工作原理,您现在必须使用以下配置让S3镜像您的Origin
。
<AllowedOrigin>http://*</AllowedOrigin>
<AllowedOrigin>https://*</AllowedOrigin>