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

Posted

技术标签:

【中文标题】最新的 Chrome (46.0.2490.7) 无法通过 https CORS 从 S3 存储桶加载字体【英文标题】:Latest Chrome (46.0.2490.7) fails to load fonts over https CORS from S3 bucket 【发布时间】:2016-01-15 07:12:50 【问题描述】:

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

我们已经有一个网站运行了几年,它的字体托管在 S3 上。它不是 S3 网站,而是私有 CDN,我们使用 S3 认证 URL 加载字体。

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

像这样为 CORS 配置 S3..

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

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

有人知道这是怎么回事,我错过了什么吗?

【问题讨论】:

这绝对是错误的行为。 CSS Fonts Module Level 3 清楚地表明"when fetching, user agents must use "Anonymous" mode". 【参考方案1】:

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

我开了一张票:https://code.google.com/p/chromium/issues/detail?id=544879

【讨论】:

我遇到了同样的问题,得出了同样的结论。 是的,chrome 开发者已经修复了它,只是等待它进入 chrome。code.google.com/p/chromium/issues/detail?id=544879【参考方案2】:

尝试更改存储桶的 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

【讨论】:

以上是关于最新的 Chrome (46.0.2490.7) 无法通过 https CORS 从 S3 存储桶加载字体的主要内容,如果未能解决你的问题,请参考以下文章

最新 Chrome DevTools(v57) 使用详解

chrome最新版49跨域问题

Flexbox 渲染被最新的 Chrome 破坏

Laggy css:在最新版本的 Chrome 上悬停过渡

Chrome 插件神仙网站推荐 !直接就能下,2022年最新!

最新版 Chrome 中的 CSS3 动画变化?