Web 开放字体格式 (.woff)

W3C 标准

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

检查与元数据

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

选择或将文件拖放到此处

100% 浏览器端私密转换 - 文件绝不会离开您的设备

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

字节级文件头签名 (Magic Bytes)

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

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

77 4F 46 46

ASCII 表示形式: wOFF

标准化: W3C Recommendation (2012)

技术规格

容器架构44-byte WOFF header followed by table directory, zlib-compressed table data, optional extended metadata, and private data
压缩方式Deflate (zlib) compression applied to each individual font table
字节序Big-Endian (SFNT standard)
色彩空间Inherited from underlying font tables
通道与结构TrueType ('glyf') or PostScript ('CFF ') glyph outlines, metrics, and typographic features
最大尺寸Up to 65,535 glyphs per font file
透明度Inherited from underlying font format
流式传输与渐进式加载Table-by-table decompression enables streaming font loading

技术对比矩阵: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 字体转换器转换为 WOFF2。

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

网页浏览器使用 OpenType 清理器 (OTS) 解析从不受信任的网页域下载的 WOFF 文件,以阻止漏洞利用载荷。

已知攻击向量

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

防御性最佳实践:

历史渊源与里程碑

2018由于具有更优越的 Brotli 压缩性能,被 WOFF2 取代,成为首选的网页字体标准。
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 等淘汰的旧版浏览器时才需要。