Web 开放字体格式 (.woff)

W3C 标准

Web Open Font Format (WOFF) 是经 W3C 批准的具有历史意义的第一代开放标准网页字体格式,它将标准的 TrueType 或 OpenType 字体与 zlib 压缩和 XML 许可证元数据进行了封装。

检查与元数据

操作系统和文件分析器通过检查开头的二进制字节序列来识别 WOFF 文件:

选择或将文件拖放到此处

隐私保护 - 文件不会离开您的设备

或粘贴 Ctrl+V
零网络传输隐私保证: 上传至外部服务器的数据为 0 字节。所有处理均在您的浏览器沙箱中本地完成。

字节级文件头签名 (魔数)

操作系统和文件分析器通过检查开头的二进制字节序列来识别 WOFF 文件:

十六进制签名 (偏移量 0):

77 4F 46 46

ASCII 表示形式: wOFF

标准化: W3C 推荐标准(2012)

技术规格

容器架构44 字节的 WOFF 标头,后接表目录、zlib 压缩的表数据,以及可选的扩展元数据和私有数据
压缩方式对每个字体表分别使用 Deflate(zlib)压缩
字节序大端序(SFNT 标准)
色彩空间继承底层字体表中的颜色配置
通道与结构TrueType(“glyf”)或 PostScript(“CFF ”)字形轮廓、度量数据和排版特性
最大尺寸每个字体文件最多 65,535 个字形
透明度继承底层字体格式的透明度支持
流式传输与渐进式加载逐表解压,可流式加载字体

技术对比矩阵:WOFF 对比同类产品

技术属性WOFF (当前)WOFF2TTFOTF
压缩编解码器每表 Deflate (zlib)带表预处理的 Brotli未压缩的 SFNT未压缩的 SFNT
文件标识签名wOFF (0x77 0x4F 0x46 0x46)wOF2 (0x77 0x4F 0x46 0x32)0x00 0x01 0x00 0x00OTTO (0x4F 0x54 0x54 0x4F)
相对文件大小比 TTF 小约 40%比 TTF 小约 60%基准标准 (100%)基准标准 (100%)
目标环境传统网页浏览器 (IE9+, Safari 5+)支持情况因浏览器而异。桌面操作系统桌面出版与印刷

常见损坏模式与十六进制恢复指南

浏览器控制台警告:'Failed to decode downloaded font: OTS parsing error'(解码下载的字体失败:OTS 解析错误)。

根本原因: 声明的未压缩表长度不匹配或 zlib 流损坏。

恢复方法: 重新压缩字体表,或使用 File2File.app 字体转换器转换为 WOFF2。

安全分析与解析器攻击向量

网页浏览器使用 OpenType Sanitizer(OTS)解析从不受信任的网站下载的 WOFF 文件,以阻止恶意利用载荷。

已知攻击向量

  • 在对损坏的字体表块进行 zlib 解压期间发生缓冲区过度读取。
  • 不匹配的表长度字段在字体渲染器中触发堆缓冲区溢出。
  • 通过字体表扩展期间的内存耗尽发起拒绝服务攻击。

防御性最佳实践: 在将下载的 WOFF 文件传递给操作系统字体引擎之前,务必使用 OTS 对其进行清理。

历史渊源与里程碑

2018凭借更出色的 Brotli 压缩,WOFF2 取代 WOFF,成为首选的网页字体标准。
2012W3C 正式发布 WOFF 1.0 作为正式的网页标准推荐规范。
2009Henrik Rydgård、Tal Leming 和 Jonathan Kew 制定了 WOFF,以解决网页字体许可方面的问题。

核心优势与特点

  • 与未经压缩的原始 TTF 或 OTF 文件相比,网页字体文件大小可减少 30% 至 50%。
  • 兼容所有自 2011 年以来发布的桌面和移动网页浏览器。
  • 包含用于字体许可、作者署名和字形厂商版权信息的可选 XML 元数据块。

技术局限与劣势

  • 已被 WOFF2 取代,后者使用 Brotli 算法压缩后的体积可缩小约 30%。
  • 若不转换为 TTF/OTF,则无法直接安装到桌面操作系统(Windows/Mac)中。
  • 较旧的 zlib 压缩算法效率低于现代熵编码器。

趣味技术冷知识

  • WOFF 1.0 的魔术字节(Magic bytes)为 'wOFF' (0x77 0x4F 0x46 0x46),而 WOFF 2.0 使用 'wOF2'。
  • 字形厂商只有在 WOFF 创建后才同意将其字体用于网页,因为其专用的容器将网页字体与可盗版的桌面字体区分开来。
  • WOFF 最初于 2010 年在 Firefox 3.6 中实现,之后才成为 W3C 官方推荐标准。

常见技术问题

WOFF 和 WOFF2 有什么区别?

WOFF 使用 zlib 压缩,而 WOFF2 使用谷歌更新的 Brotli 算法和表转换,生成的文件比 WOFF 小约 30%。

如何将 WOFF 字体转换为桌面端使用的 TTF 或 OTF?

您可以直接在网络浏览器中使用 File2File.app,在几秒钟内将 WOFF 文件转换为可安装的桌面端 TTF 或 OTF 字体。

在现代网站中我还需要 WOFF 1.0 吗?

不需要。所有现代浏览器都已原生支持 WOFF2。WOFF 1.0 仅在您必须支持 Internet Explorer 等淘汰的旧版浏览器时才需要。