【问题标题】:Getting S3 CORS Access-Control-Allow-Origin to dynamically echo requesting domain让 S3 CORS Access-Control-Allow-Origin 动态回显请求域
【发布时间】: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,因此还会发送凭据。

【问题讨论】:

    标签: amazon-s3 cors


    【解决方案1】:

    对我来说,这似乎是某种缓存问题(即使我没有使用云端,只使用 S3)。将随机参数附加到 URL 为我解决了这个问题,例如

    https://s3-amazon.com/bucket/file.jpg?d=3243253456346

    我在 S3 中也有以下 CORS 设置:

    <?xml version="1.0" encoding="UTF-8"?>
    <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
        <CORSRule>
            <AllowedOrigin>http://*</AllowedOrigin>
            <AllowedOrigin>https://*</AllowedOrigin>
            <AllowedMethod>GET</AllowedMethod>
            <MaxAgeSeconds>3000</MaxAgeSeconds>
            <AllowedHeader>*</AllowedHeader>
        </CORSRule>
    </CORSConfiguration>
    

    【讨论】:

    • 这也解决了我的 S3(非 Cloudfront)CORS 问题。如果只有文档为这种缓存行为提供某种解释......
    【解决方案2】:

    AWS 的 CORS 文档没有记录这一点,但我设法在 thread on AWS Developer Forums 中得到了答案,我发现如果 * 被用于 AllowedOrigin,AWS 改变了回显请求域的原始行为。

    要让 S3 动态回显请求域,AllowedOrigin 必须这样设置:

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

    【讨论】:

    • 非常感谢这个答案——它终于解决了这个问题!我对这件事束手无策。
    • 我想知道这是否仍然有效,5 年后。在类似的情况下,似乎无法正常工作。
    猜你喜欢
    • 2016-08-03
    • 2019-08-02
    • 1970-01-01
    • 2013-12-09
    • 2021-12-05
    • 2016-09-30
    • 2019-10-02
    • 2015-10-01
    相关资源
    最近更新 更多