【发布时间】:2014-08-16 22:48:27
【问题描述】:
如何设置 S3 CORS AllowedOrigin 配置,使其在 Access-Control-Allow-Origin 标头中动态回显请求域?
在帖子"CORS with CloudFront, S3, and Multiple Domains" 中,建议将AllowedOrigin 设置为<AllowedOrigin>*</AllowedOrigin> 这样做。但是,S3 改为返回 Access-Control-Allow-Origin: *。
Access-Control-Allow-Origin: * 在我的情况下不起作用,因为我在 JavaScript 应用程序中使用 image.crossOrigin = "use-credentials"。使用此选项,S3 将返回 Access-Control-Allow-Credentials: true。然后跨域访问图像失败,因为using wildcard as the allowed origin in conjunction with credentials is not permitted。
为什么需要这样做的背景:
在我的设置中,访问 S3 上的图像必须通过我们的域,其中需要身份验证来限制访问并检查帐户是否有权访问图像。如果是,服务器将 302 重定向返回到 S3 URL。
要使身份验证正常工作,必须设置image.crossOrigin = "use-credentials",以便请求使用所需凭据到达我的服务器。 (顺便说一句,当我在 Firefox 30.0 和 Chrome 35.0.1916.153 上进行测试时,如果 crossOrigin 设置为 anonymous,仍然会发送凭据。但在 Safari 7.0.4 上不会。只能使用 @ 获得一致的跨浏览器行为987654334@.)。
由于浏览器会透明地重定向到 S3 URL,因此还会发送凭据。
【问题讨论】: