在跨域请求字体文件时,您必须确保允许域请求使用CORS标头访问字体文件:
但是,在img
元素或background-image
请求图片时,这不是必需的。
为什么这些文件类型具有不同的安全性?
答案 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)