Web オープンフォント形式 (.woff)
W3C勧告(2012) 標準Web Open Font Format(WOFF)は、W3Cが推奨する歴史的な第1世代のオープン標準Webフォント形式であり、標準のTrueTypeまたはOpenTypeフォントをzlib圧縮とXMLライセンスメタデータでラップしています。
調査とメタデータ
オペレーティングシステムやファイル解析ツールは、先頭のバイナリ列を検査してWOFFファイルを識別します:
バイトレベルのヘッダーシグネチャ (マジックバイト)
オペレーティングシステムやファイル解析ツールは、先頭のバイナリ列を検査してWOFFファイルを識別します:
16進数シグネチャ(オフセット0):
77 4F 46 46ASCII表現: wOFF
標準化: W3C勧告(2012)
技術仕様
| コンテナアーキテクチャ | 44バイトのWOFFヘッダーに続き、テーブルディレクトリ、zlib圧縮テーブルデータ、オプションの拡張メタデータとプライベートデータを格納 |
| 圧縮 | 各フォントテーブルにDeflate(zlib)圧縮を適用 |
| バイトエンディアン | ビッグエンディアン(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%) |
| ターゲット環境 | レガシーWebブラウザ(IE9+、Safari 5+) | 対応状況はブラウザーによって異なります。 | デスクトップオペレーティングシステム | デスクトップパブリッシングおよび印刷 |
一般的な破損モードと16進数リカバリガイド
ブラウザコンソールの警告: 'Failed to decode downloaded font: OTS parsing error'。
根本原因: 宣言された未圧縮テーブルの長さの不一致、または破損したzlibストリーム。
復旧: フォントテーブルを再圧縮するか、File2File.appフォントコンバーターを使用してWOFF2に変換します。
セキュリティ分析とパーサー攻撃ベクトル
Webブラウザは、信頼できないWebドメインからダウンロードしたWOFFファイルをOpenType Sanitizer(OTS)を使用して解析し、エクスプロイトペイロードをブロックします。
既知の攻撃ベクター
- 破損したフォントテーブルチャンクのzlib解凍中のバッファオーバーリード。
- フォントレンダラーでヒープバッファオーバーフローを引き起こす、一致しないテーブル長フィールド。
- フォントテーブルの展開中のメモリ枯渇によるサービス拒否。
防御的ベストプラクティス: ダウンロードした WOFF ファイルは、オペレーティングシステムのフォントエンジンに渡す前に、必ず OTS でサニタイズしてください。
歴史的背景とマイルストーン
主なメリット
- 生のTTFやOTFファイルと比べて、Webフォントのファイルサイズを削減できる場合があります。削減量はフォントとエンコーダーによって異なります。
- 2011年以降にリリースされたすべてのデスクトップおよびモバイルWebブラウザと後方互換性があります。
- フォントのライセンス、作者のクレジット、およびファウンドリの著作権情報用のオプションのXMLメタデータブロックが含まれています。
技術的な制限とデメリット
- 多くのWebワークフローでは、Brotli圧縮とフォントテーブル変換を使うWOFF2に置き換えられています。ファイルサイズの削減量はさまざまです。
- TTF/OTFに変換しない限り、デスクトップオペレーティングシステム(Windows/Mac)に直接インストールすることはできません。
- 古いzlib圧縮アルゴリズムは、最新のエントロピーエンコーダーほど効率的ではありません。
興味深い技術トリビア
- WOFF 1.0のマジックバイトは「wOFF」(0x77 0x4F 0x46 0x46)であり、WOFF 2.0は「wOF2」を使用します。
- タイプファウンドリは、WOFFの専用コンテナによってWebフォントが不正コピーされやすいデスクトップフォントと区別されるため、WOFFの作成後に初めてフォントをWebで使用することに同意しました。
- WOFFは、公式のW3C勧告になる前の2010年に、Firefox 3.6に最初に実装されました。
よくある技術的な質問
WOFF と WOFF2 の違いは何ですか?
WOFF は zlib 圧縮を使用しますが、WOFF2 は Google の新しい Brotli アルゴリズムとテーブル変換を使用するため、WOFF よりもファイルサイズが約30%小さくなります。
デスクトップ用に WOFF フォントを TTF または OTF に変換するにはどうすればよいですか?
Webブラウザ上で File2File.app を直接使用すれば、数秒で WOFF ファイルをインストール可能なデスクトップ用の TTF または OTF フォントに変換できます。
現代のWebサイトでも WOFF 1.0 はまだ必要ですか?
いいえ。すべてのモダンブラウザが WOFF2 をネイティブサポートしています。WOFF 1.0 は、Internet Explorer などの古いレガシーブラウザに対応する必要がある場合にのみ必要です。