Web Open Font Format (.woff)
W3C 標準Web Open Font Format (WOFF) 是 W3C 認可的歷史性第一代開放標準網頁字型格式,將標準的 TrueType 或 OpenType 字型以 zlib 壓縮與 XML 授權中繼資料包裝。
檢查與中繼資料
作業系統與檔案分析工具透過檢查開頭的二進位位元組序列來識別 WOFF 檔案:
位元組層級標頭簽章(檔案簽章)
作業系統與檔案分析工具透過檢查開頭的二進位位元組序列來識別 WOFF 檔案:
十六進位簽章(偏移量 0):
77 4F 46 46ASCII 表示法: wOFF
標準化: W3C 建議標準(2012 年)
技術規格
| 容器架構 | 44 位元組的 WOFF 標頭,後接表格目錄、zlib 壓縮的表格資料、選擇性的擴充中繼資料與私密資料 |
| 壓縮 | 對每個個別字型表格套用 Deflate (zlib) 壓縮 |
| 位元組序 | 大端序(Big-Endian,SFNT 標準) |
| 色彩空間 | 繼承自底層字型表格 |
| 色版與結構 | TrueType('glyf')或 PostScript('CFF ')字形外框、度量與排版特徵 |
| 最大尺寸 | 每個字型檔案最多 65,535 個字形 |
| 透明度 | 繼承自底層字型格式 |
| 串流與漸進式 | 逐表解壓縮支援串流字型載入 |
技術比較矩陣:WOFF 對比競爭格式
| 技術屬性 | WOFF (目前) | WOFF2 | TTF | OTF |
|---|---|---|---|---|
| 壓縮編解碼器 | 每表 Deflate (zlib) | 帶有表格預先處理的 Brotli | 未壓縮的 SFNT | 未壓縮的 SFNT |
| 檔案簽章 | wOFF (0x77 0x4F 0x46 0x46) | wOF2 (0x77 0x4F 0x46 0x32) | 0x00 0x01 0x00 0x00 | OTTO (0x4F 0x54 0x54 0x4F) |
| 相對檔案大小 | 通常比 TTF 小;節省幅度因字型而異 | 通常比 TTF 小;節省幅度因字型而異 | 基準標準 (100%) | 基準標準 (100%) |
| 目標環境 | 舊版網頁瀏覽器(IE9+、Safari 5+) | 支援情況因瀏覽器而異。 | 桌面作業系統 | 桌面出版與列印 |
常見損壞模式與十六進位修復指南
瀏覽器主控台警告:「Failed to decode downloaded font: OTS parsing error」。
根本原因: 宣告的未壓縮表格長度不符或 zlib 資料流受損。
修復: 使用 File2File.app 字型轉換器重新壓縮字型表格或轉換為 WOFF2。
安全性分析與解析器攻擊向量
網頁瀏覽器使用 OpenType Sanitizer (OTS) 解析從不受信任的網頁網域下載的 WOFF 檔案,以阻擋攻擊酬載。
已知攻擊向量
- 在對受損的字型表格區塊進行 zlib 解壓縮期間發生緩衝區過度讀取。
- 不相符的表格長度欄位會觸發字型算繪器中的堆積緩衝區溢位。
- 透過字型表格展開期間的記憶體耗盡來造成阻斷服務。
防禦最佳實務: 在傳遞至作業系統字型引擎之前,一律使用 OTS 清理下載的 WOFF 檔案。
歷史起源與里程碑
2018因具備更優異的 Brotli 壓縮而被 WOFF2 取代,成為首選的網頁字型標準。
2012W3C 正式發布 WOFF 1.0 作為正式的網頁標準建議。
2009Henrik Rydgård、Tal Leming 與 Jonathan Kew 制定 WOFF,以解決網頁字型授權疑慮。
主要優勢與優點
- 相較於原始的 TTF 或 OTF 檔案,可縮減網頁字型檔案大小;節省幅度取決於字型與編碼器。
- WOFF 受到許多瀏覽器的支援,包含較舊的版本;相容性取決於瀏覽器版本與平臺。
- 包含選擇性的 XML 中繼資料區塊,用於字型授權、作者致謝與字型廠版權資訊。
技術限制與缺點
- 在許多網頁工作流程中已被 WOFF2 取代,後者使用 Brotli 壓縮與字型表格轉換;檔案大小節省幅度不一。
- 若未轉換為 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 字型轉換為 TTF 或 OTF 以供桌面使用?
您可以使用 File2File.app 直接在網頁瀏覽器中,於幾秒鐘內將 WOFF 檔案轉換為可安裝的桌面 TTF 或 OTF 字型。
在現代網站中,我還需要 WOFF 1.0 嗎?
目前主流瀏覽器皆支援 WOFF2。對於較舊的瀏覽器或特定的嵌入式環境,WOFF 備用字型可能仍有助益。