@ font-face如何工作?

hit*_*uct 7 fonts css3 font-face font-embedding

我知道使用@ font-face允许浏览器下载自定义字体并在网页中使用它,就像任何系统字体一样.

我想知道的是浏览器是否对字体进行编码或使用它而不暴露它?

谢谢

Yi *_*ang 6

浏览器无法保护字体的来源.一旦浏览器收到信息,您就可以安全地假设用户可以完全访问您发送的任何信息.

因此,保持字体安全的问题是在法律层面(通过选择允许嵌入的字体)或通过服务器端混淆方案完成的.例如,查看通过TypeKit嵌入的字体:

@font-face {
    font-family:"rosewood-std-fill-1";
    src:url(data:font/opentype;base64,d09GRgABAAAAAEa4ABMAAAAA2XwA.....);
    font-style:normal;
    font-weight:400;
}
Run Code Online (Sandbox Code Playgroud)

该字体通过base64编码过程进行模糊处理.此外,字体分为两部分,字形数量仅限于网站所需的字体数量.

另一方面,查看FontSquirrel和Google Font API @font-face工具包,您可以看到字体的实际来源发送给用户 - 无需进行模糊处理.此外,字体所有者可能会要求某种形式的归属,例如

如果字体是免费字体($ 0.00许可费),您可以将此字体用于Font-Face嵌入,但前提是您在页面上放置了www.exljbris.nl的链接和/或发出此通知

/* A font by Jos Buivenga (exljbris) -> www.exljbris.com */ 
Run Code Online (Sandbox Code Playgroud)

在你的CSS文件中尽可能接近声明Font-Face嵌入此字体的代码段.

此许可证中看到.因此,从所有这些,我们可以有把握地得出结论,字体安全问题不会发生在客户端,而是落在开发人员的肩上,因此浏览器不能也不会做任何事情来阻止用户获取访问权限这些字体.

  • base64编码不是混淆,它是一种消除在保持"text/css"MIME类型的同时对字体文件发出额外HTTP请求的方法. (3认同)
  • *每个*HTTP请求都很重要,而base64是一个内容传输编码,每个人都有一个解码器.目的不是混淆 - 替代方案是二进制传输,不能嵌入样式表.如果您愿意,您可以选择强制请求字体文件; Typekit选择不这样做.(我对小的重复背景图像使用相同的技术.)他们给你一个用户比二进制文件更容易访问的文件(不通过缓存搜索,只从CSS文件复制,保存和转换). (3认同)