为什么字体文件必须遵守CORS规则,但图像不是?

时间:2015-10-19 07:04:32

标签: cors font-face

在跨域请求字体文件时,您必须确保允许域请求使用CORS标头访问字体文件:

  • 访问控制允许来源
  • 接入控制允许证书

但是,在img元素或background-image请求图片时,这不是必需的。

为什么这些文件类型具有不同的安全性?

2 个答案:

答案 0 :(得分:2)

通过扩展@Marged提供的链接,浏览器对字体文件强制执行CORS,因为the spec says必须这样做:

  

对于字体加载,用户代理必须使用[FETCH]规范为@ font-face规则中定义的URL使用可能启用了CORS的获取方法。提取时,用户代理必须使用“匿名”模式,将引荐来源设置为样式表的URL,并将来源设置为包含文档的URL。

...并直接记录:

  

对于作者来说,这意味着字体通常不会跨源加载[…]

但这并不能真正回答您的问题,因为规范本身并没有给出为什么必须存在此要求的理由。

链接的Firefox线程是许多讨论之一,并提到了一般的"improved security for new specs"基本原理:

  

这里应该讨论哪些“新”资源类型?   默认为,是否应该简单地默认为相同的不受限制   图片和脚本允许链接,或者默认情况下是否应限制它们并具有通过CORS放松的能力

但这听起来像是在这种特殊情况下,驱动原因是政治上的。也就是说,它考虑了并非“纯粹是技术性”的问题。作为实施者之一summarized

  

主要原因是字体供应商希望Web作者将字体的使用限制在自己的网站上,除非默认情况下我们提供相同来源的限制,否则Web作者无法轻松,可靠地做到这一点。

other implementers的错误跟踪器讨论也证实了这一点,例如:

  

据我所知,[浏览器]不这样做的主要影响是网站无意中违反了其字体许可,并且作者对正确的字体部署方式感到困惑。

答案 1 :(得分:0)

几个月前,我试图找到一个很好的答案。我看到discussions关于这个和rfc here,但如果原因让我信服,我就没有。

我认为这是人们必须接受的事情之一; - )