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

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

発行日: 2016年7月
ステータス: 情報提供 (Informational)
著者: J. Alakuijala (Google Inc.), Z. Szabadka (Google Inc.)


概要 (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スタックの標準コンポーネントとなっています。