RFC 7932 - Brotli Komprimiertes Datenformat
Veröffentlichungsdatum: Juli 2016
Status: Informativ (Informational)
Autoren: J. Alakuijala (Google Inc.), Z. Szabadka (Google Inc.)
Zusammenfassung (Abstract)
Diese Spezifikation definiert ein verlustfreies komprimiertes Datenformat (Lossless Compressed Data Format), das Daten unter Verwendung einer Kombination des LZ77-Algorithmus und Huffman-Codierung komprimiert, mit einer Effizienz, die mit den besten derzeit verfügbaren Allzweck-Komprimierungsmethoden vergleichbar ist.
Status dieses Dokuments (Status of This Memo)
Dieses Dokument ist keine Internet-Standards-Track-Spezifikation; es wird zu Informationszwecken veröffentlicht.
Dieses Dokument ist ein Produkt der Internet Engineering Task Force (IETF). Es wurde von der Internet Engineering Steering Group (IESG) zur Veröffentlichung genehmigt. Nicht alle von der IESG genehmigten Dokumente sind Kandidaten für ein Internet-Standard-Level; siehe Abschnitt 2 von RFC 7841.
Informationen über den aktuellen Status dieses Dokuments, Errata und Feedback können unter http://www.rfc-editor.org/info/rfc7932 abgerufen werden.
Inhaltsverzeichnis (Table of Contents)
-
- Einführung (Introduction)
- 1.1 Zweck (Purpose)
- 1.2 Zielgruppe (Intended Audience)
- 1.3 Umfang (Scope)
- 1.4 Konformität (Compliance)
- 1.5 Definitionen von Begriffen und verwendeten Konventionen (Definitions of Terms and Conventions Used)
- 1.5.1 Verpackung in Bytes (Packing into Bytes)
-
- Überblick über die komprimierte Darstellung (Compressed Representation Overview)
-
- Komprimierte Darstellung von Präfixcodes (Compressed Representation of Prefix Codes)
- 3.1 Einführung in die Präfixcodierung (Introduction to Prefix Coding)
- 3.2 Verwendung der Präfixcodierung im Brotli-Format (Use of Prefix Coding in the Brotli Format)
- 3.3 Alphabetgrößen (Alphabet Sizes)
- 3.4 Einfache Präfixcodes (Simple Prefix Codes)
- 3.5 Komplexe Präfixcodes (Complex Prefix Codes)
-
- Kodierung von Distanzen (Encoding of Distances)
-
- Kodierung von Literal-Einfügelängen und Kopierlängen (Encoding of Literal Insertion Lengths and Copy Lengths)
-
- Kodierung von Block-Switch-Befehlen (Encoding of Block-Switch Commands)
-
- Kontextmodellierung (Context Modeling)
- 7.1 Kontextmodi und Kontext-ID-Suche für Literale (Context Modes and Context ID Lookup for Literals)
- 7.2 Kontext-ID für Distanzen (Context ID for Distances)
- 7.3 Kodierung der Kontextkarte (Encoding of the Context Map)
-
- Statisches Wörterbuch (Static Dictionary)
-
- Komprimiertes Datenformat (Compressed Data Format)
- 9.1 Format des Stream-Headers (Format of the Stream Header)
- 9.2 Format des Meta-Block-Headers (Format of the Meta-Block Header)
- 9.3 Format der Meta-Block-Daten (Format of the Meta-Block Data)
-
- Dekodierungsalgorithmus (Decoding Algorithm)
-
- Überlegungen für Kompressor-Implementierungen (Considerations for Compressor Implementations)
- 11.1 Trivialer Kompressor (Trivial Compressor)
- 11.2 Ausrichtung komprimierter Meta-Blöcke an Byte-Grenzen (Aligning Compressed Meta-Blocks to Byte Boundaries)
- 11.3 Erstellung eigenständiger Teile innerhalb der komprimierten Daten (Creating Self-Contained Parts within the Compressed Data)
-
- Sicherheitsüberlegungen (Security Considerations)
-
- IANA-Überlegungen (IANA Considerations)
-
- Informative Referenzen (Informative References)
Anhänge (Appendices)
- Anhang A. Statische Wörterbuchdaten (Static Dictionary Data)
- Anhang B. Liste der Worttransformationen (List of Word Transformations)
- Anhang C. Berechnung von CRC-32-Prüfwerten (Computing CRC-32 Check Values)
- Anhang D. Quellcode (Source Code)
- Danksagungen (Acknowledgments)
- Autorenаdressen (Authors' Addresses)
Überblick
Was ist Brotli?
Brotli ist ein universeller verlustfreier Komprimierungsalgorithmus (Generic-purpose Lossless Compression Algorithm), der 2013 von Google entwickelt wurde. Er ist darauf ausgelegt, Daten mit Komprimierungsraten zu komprimieren, die mit den besten derzeit verfügbaren Allzweck-Komprimierungsmethoden vergleichbar sind, während gleichzeitig vergleichbare Dekomprimierungsgeschwindigkeiten bereitgestellt werden.
Hauptmerkmale
Technische Grundlage:
- LZ77-Algorithmus-Variante (Sliding Window Matching)
- Huffman-Codierung (Präfixcodierung, Prefix Encoding)
- Kontextmodellierung zweiter Ordnung (Second-order Context Modeling)
- Statisches Wörterbuch (vordefinierte häufige Zeichenketten, Predefined Common Strings)
Leistungsmerkmale:
- Komprimierungsrate (Compression Ratio): 15-25% besser als gzip
- Dekomprimierungsgeschwindigkeit (Decompression Speed): Schnell, vergleichbar mit gzip
- Komprimierungsgeschwindigkeit (Compression Speed): Langsamer als gzip (einstellbar nach Level)
- Fenstergröße (Window Size): 1 KB bis 16 MB (konfigurierbar)
Typische Anwendungen
1. HTTP-Content-Encoding
Accept-Encoding: br, gzip, deflate
Content-Encoding: br
Hauptanwendungsfälle:
- Statische HTML/CSS/JavaScript-Dateien
- Web-Schriftarten (WOFF2 verwendet Brotli intern)
- API-Antworten
2. Schriftkomprimierung (Font Compression) (WOFF2)
WOFF2-Standard:
- Integrierte Brotli-Komprimierung
- Schriftdateien um 30-50% reduziert
- Von allen modernen Browsern unterstützt
3. Offline-Datenkomprimierung (Offline Data Compression)
Anwendungen:
- Softwarepaketverteilung
- Datenarchivierung
- Android-APK-Ressourcen
Komprimierungsstufen (Compression Levels)
Stufe Rate Geschwindigkeit Anwendungsfall
------|----------|-----------------|------------------
0 | Niedrig | Sehr schnell | Echtzeit (nicht empfohlen)
1 | Niedrig | Schnell | Dynamischer Inhalt
4 | Mittel | Schnell | Dynamischer Inhalt (Standard)
5 | Gut | Mittel | Dynamischer Inhalt
6 | Gut | Langsam | Statische Ressourcen
9 | Sehr gut | Sehr langsam | Statische Ressourcen
11 | Optimal | Am langsamsten | Offline-Vorkomprimierung
Empfehlungen:
- Dynamischer Inhalt: Stufe 4-5
- Statische Vorkomprimierung: Stufe 11
- Offline-Archivierung: Stufe 11
Browser-Unterstützung (Browser Support)
Browser | Version | Unterstützung
----------------|---------|---------------
Chrome | 50+ | ✓ Vollständig
Firefox | 44+ | ✓ Vollständig
Safari | 11+ | ✓ Vollständig
Edge | 15+ | ✓ Vollständig
Opera | 36+ | ✓ Vollständig
IE | Alle | ✗ Keine
Mobil:
iOS Safari 11+: ✓
Android Chrome: ✓
Samsung Internet: ✓
Abdeckung: > 95% der modernen Browser
Brotli vs Gzip
Vorteile:
- ✓ Bessere Komprimierungsrate (15-25% Verbesserung)
- ✓ Schnelle oder vergleichbare Dekomprimierungsgeschwindigkeit
- ✓ Besonders geeignet für Textinhalte
- ✓ Statisches Wörterbuch verbessert HTML/CSS-Komprimierung
Nachteile:
- ✗ Langsamere Komprimierungsgeschwindigkeit
- ✗ Höhere CPU-Auslastung
- ✗ Ungeeignet für Echtzeit-High-QPS-Szenarien
- ✗ Keine Unterstützung in älteren Browsern
Migrationsstrategie:
- Statische Ressourcen: Sofort Brotli verwenden
- Dynamischer Inhalt: Vor Entscheidung bewerten
- Hoher QPS: gzip beibehalten
- Niedriger QPS: Brotli kann verwendet werden
- Hybridstrategie:
- Statisch: Brotli-Vorkomprimierung
- Dynamisch: gzip-Echtzeit-Komprimierung
- Fallback: Immer gzip als Backup bereitstellen
Verwandte Ressourcen
- Offizieller RFC-Text: RFC 7932 (TXT)
- Offizielle Seite: RFC 7932 DataTracker
- Brotli GitHub:
https://github.com/google/brotli - Verwandter RFC: RFC 8878 - Zstandard-Komprimierung
- Errata: RFC Editor Errata
Zusammenfassung: Brotli ist ein moderner Komprimierungsalgorithmus, der für das Web optimiert ist, besonders geeignet für die Vorkomprimierung statischer Inhalte. Durch bessere Komprimierungsraten und schnelle Dekomprimierung verbessert er die Web-Performance erheblich und ist zu einer Standardkomponente des modernen Web-Stacks geworden.