メインコンテンツまでスキップ

RFC 7932 - Brotli圧縮データフォーマット

  • ステータス: Informational
  • 発行日: July 2016
  • ストリーム: IETF
  • エラッタ: エラッタなし

概要 (Abstract)​

本仕様は、LZ77アルゴリズム (LZ77 Algorithm) とハフマン符号化 (Huffman Coding) の組み合わせを使用してデータを圧縮する、ロスレス圧縮データフォーマット (Lossless Compressed Data Format) を定義します。その効率性は、現在利用可能な最高の汎用圧縮方法に匹敵します。


本文書のステータス (Status of This Memo)​

本文書はインターネット標準化過程仕様 (Internet Standards Track Specification) ではありません。情報提供を目的として公開されています。

本文書はインターネット技術タスクフォース (Internet Engineering Task Force, IETF) の成果物です。インターネット技術運営グループ (Internet Engineering Steering Group, IESG) によって公開が承認されています。IESGによって承認されたすべての文書が、あらゆるレベルのインターネット標準の候補となるわけではありません。RFC 7841のセクション2を参照してください。

本文書の現在のステータス、正誤表、およびフィードバックの提供方法に関する情報は、http://www.rfc-editor.org/info/rfc7932 から入手できます。


目次 (Table of Contents)​

    1. はじめに (Introduction)
    • 1.1 目的 (Purpose)
    • 1.2 対象読者 (Intended Audience)
    • 1.3 範囲 (Scope)
    • 1.4 準拠 (Compliance)
    • 1.5 用語と規約の定義 (Definitions of Terms and Conventions Used)
      • 1.5.1 バイトへのパッキング (Packing into Bytes)
    1. 圧縮表現の概要 (Compressed Representation Overview)
    1. プレフィックスコードの圧縮表現 (Compressed Representation of Prefix Codes)
    • 3.1 プレフィックス符号化入門 (Introduction to Prefix Coding)
    • 3.2 Brotliフォーマットにおけるプレフィックス符号化の使用 (Use of Prefix Coding in the Brotli Format)
    • 3.3 アルファベットサイズ (Alphabet Sizes)
    • 3.4 単純なプレフィックスコード (Simple Prefix Codes)
    • 3.5 複雑なプレフィックスコード (Complex Prefix Codes)
    1. 距離のエンコーディング (Encoding of Distances)
    1. リテラル挿入長とコピー長のエンコーディング (Encoding of Literal Insertion Lengths and Copy Lengths)
    1. ブロック切り替えコマンドのエンコーディング (Encoding of Block-Switch Commands)
    1. コンテキストモデリング (Context Modeling)
    • 7.1 コンテキストモードとリテラルのコンテキストIDルックアップ (Context Modes and Context ID Lookup for Literals)
    • 7.2 距離のコンテキストID (Context ID for Distances)
    • 7.3 コンテキストマップのエンコーディング (Encoding of the Context Map)
    1. 静的辞書 (Static Dictionary)
    1. 圧縮データフォーマット (Compressed Data Format)
    • 9.1 ストリームヘッダーのフォーマット (Format of the Stream Header)
    • 9.2 メタブロックヘッダーのフォーマット (Format of the Meta-Block Header)
    • 9.3 メタブロックデータのフォーマット (Format of the Meta-Block Data)
    1. デコードアルゴリズム (Decoding Algorithm)
    1. 圧縮器実装の考慮事項 (Considerations for Compressor Implementations)
    • 11.1 トリビアル圧縮器 (Trivial Compressor)
    • 11.2 圧縮メタブロックのバイト境界への整列 (Aligning Compressed Meta-Blocks to Byte Boundaries)
    • 11.3 圧縮データ内の自己完結部分の作成 (Creating Self-Contained Parts within the Compressed Data)
    1. セキュリティの考慮事項 (Security Considerations)
    1. IANAの考慮事項 (IANA Considerations)
    1. 参考文献 (Informative References)

附録 (Appendices)​

  • 附録 A. 静的辞書データ (Static Dictionary Data)
  • 附録 B. 単語変換リスト (List of Word Transformations)
  • 附録 C. CRC-32チェック値の計算 (Computing CRC-32 Check Values)
  • 附録 D. ソースコード (Source Code)
  • 謝辞 (Acknowledgments)
  • 著者アドレス (Authors' Addresses)

概要​

Brotliとは?​

Brotliは、2013年にGoogleによって開発された汎用ロスレス圧縮アルゴリズム (Generic-purpose Lossless Compression Algorithm) です。現在利用可能な最高の汎用圧縮方法に匹敵する圧縮率でデータを圧縮し、同時に同等の解凍速度を提供するように設計されています。

主な特徴​

技術基盤:

  • LZ77アルゴリズムの変種 (スライディングウィンドウマッチング, Sliding Window Matching)
  • ハフマン符号化 (プレフィックス符号化, Prefix Encoding)
  • 二次コンテキストモデリング (Second-order Context Modeling)
  • 静的辞書 (事前定義された一般的な文字列, Predefined Common Strings)

性能特性:

  • 圧縮率 (Compression Ratio): gzipより15-25%良好
  • 解凍速度 (Decompression Speed): 高速、gzipに匹敵
  • 圧縮速度 (Compression Speed): gzipより遅い (レベルで調整可能)
  • ウィンドウサイズ (Window Size): 1 KB~16 MB (設定可能)

典型的な用途​

1. HTTPコンテンツエンコーディング (HTTP Content Encoding)

Accept-Encoding: br, gzip, deflate
Content-Encoding: br

主な使用例:

  • 静的HTML/CSS/JavaScriptファイル
  • Webフォント (WOFF2は内部的にBrotliを使用)
  • APIレスポンス

2. フォント圧縮 (Font Compression) (WOFF2)

WOFF2標準:

  • 内蔵Brotli圧縮
  • フォントファイルが30-50%縮小
  • すべての最新ブラウザでサポート

3. オフラインデータ圧縮 (Offline Data Compression)

アプリケーション:

  • ソフトウェアパッケージ配布
  • データアーカイブ
  • Android APKリソース

圧縮レベル (Compression Levels)​

レベル  圧縮率      速度         使用シーン
-----|----------|-----------|------------------
0 | 低 | 非常に高速 | リアルタイム (推奨されない)
1 | 低 | 高速 | 動的コンテンツ
4 | 中 | 高速 | 動的コンテンツ (デフォルト)
5 | 良好 | 中速 | 動的コンテンツ
6 | 良好 | 低速 | 静的リソース
9 | 非常に良好| 非常に低速 | 静的リソース
11 | 最高 | 最も遅い | オフライン事前圧縮

推奨事項:

  • 動的コンテンツ: レベル4-5
  • 静的事前圧縮: レベル11
  • オフラインアーカイブ: レベル11

ブラウザサポート (Browser Support)​

ブラウザ        | バージョン | サポート
----------------|------------|----------
Chrome | 50+ | ✓ 完全
Firefox | 44+ | ✓ 完全
Safari | 11+ | ✓ 完全
Edge | 15+ | ✓ 完全
Opera | 36+ | ✓ 完全
IE | すべて | ✗ なし

モバイル:
iOS Safari 11+: ✓
Android Chrome: ✓
Samsung Internet: ✓

カバレッジ: 最新ブラウザの95%以上

Brotli vs Gzip​

利点:

  • ✓ より良い圧縮率 (15-25%改善)
  • ✓ 高速または同等の解凍速度
  • ✓ 特にテキストコンテンツに適している
  • ✓ 静的辞書がHTML/CSS圧縮を改善

欠点:

  • ✗ 圧縮速度が遅い
  • ✗ CPU使用率が高い
  • ✗ リアルタイム高QPSシナリオには不適
  • ✗ レガシーブラウザではサポートされていない

移行戦略:

  1. 静的リソース: すぐにBrotliを使用
  2. 動的コンテンツ: 決定前に評価
    • 高QPS: gzipを維持
    • 低QPS: Brotliを使用可能
  3. ハイブリッド戦略:
    • 静的: Brotli事前圧縮
    • 動的: gzipリアルタイム圧縮
  4. フォールバック: 常にgzipをバックアップとして提供

関連リソース​


まとめ: Brotliは、Web向けに最適化された最新の圧縮アルゴリズムであり、特に静的コンテンツの事前圧縮に適しています。より良い圧縮率と高速な解凍により、Webパフォーマンスを大幅に向上させ、最新のWebスタックの標準コンポーネントとなっています。