最新 Chrome (46.0.2490.7) 无法通过 https CORS 从 S3 存储桶加载字体

Latest Chrome (46.0.2490.7) fails to load fonts over https CORS from S3 bucket

更新:看起来像是 chrome 中的错误:https://code.google.com/p/chromium/issues/detail?id=544879

几年来,我们已经建立了一个 运行 网站,字体托管在 S3 上。它不是 S3 网站,它是一个私人 CDN,我们使用经过身份验证的 S3 URL.

加载字体

使用 Chrome 的最新更新,由于 CORS 问题,此功能已停止工作。

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>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>

这一直有效到 chrome 46.0.2490.7(2 天前发布)。 它现在错误:

Font from origin 'https://domain.s3-eu-west-1.amazonaws.com' has been blocked from loading by Cross-Origin Resource Sharing policy: A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true. Origin 'https://domain.co.uk' is therefore not allowed access.

听起来 Chrome 本身正在添加 Credentials Flag?我发现这张票 https://code.google.com/p/chromium/issues/detail?id=516192 从 8 月开始,听起来他们在 https 相同域请求上强制执行了凭据标志,但这是一个 CORS https 请求,所以不应该添加它?

此外,即使我删除 * 并添加域以查看是否修复了它,它也会说没有设置 Access-Control-Allow-Origin 值,但事实并非如此。

有人知道这是怎么回事吗,我是不是遗漏了什么?

目前我发现的唯一解决方法是通过同一域服务器代理字体。不理想。

我开了工单:https://code.google.com/p/chromium/issues/detail?id=544879

尝试更改存储桶的 CORS 策略

转到

Amazon S3 > [your-bucket] > Permissions >  CORS configuration

并使用以下配置

<!-- Sample policy -->
<CORSConfiguration>
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
    </CORSRule>
</CORSConfiguration>

参考:Official doc here