最新 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>
更新:看起来像是 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>