RFC 7932 - Formato Dati Compressi Brotli
Data di pubblicazione: Luglio 2016
Stato: Informativo (Informational)
Autori: J. Alakuijala (Google Inc.), Z. Szabadka (Google Inc.)
Sommario (Abstract)
Questa specifica definisce un formato di dati compressi senza perdita (Lossless Compressed Data Format) che comprime i dati utilizzando una combinazione dell'algoritmo LZ77 e della codifica di Huffman, con un'efficienza paragonabile ai migliori metodi di compressione generici attualmente disponibili.
Stato di questo documento (Status of This Memo)
Questo documento non è una specifica dello standard Internet; è pubblicato a scopi informativi.
Questo documento è un prodotto dell'Internet Engineering Task Force (IETF). È stato approvato per la pubblicazione dall'Internet Engineering Steering Group (IESG). Non tutti i documenti approvati dall'IESG sono candidati per un qualsiasi livello di standard Internet; vedere la Sezione 2 della RFC 7841.
Le informazioni sullo stato attuale di questo documento, eventuali errata e come fornire feedback possono essere ottenute all'indirizzo http://www.rfc-editor.org/info/rfc7932.
Indice dei contenuti (Table of Contents)
-
- Introduzione (Introduction)
- 1.1 Scopo (Purpose)
- 1.2 Pubblico di destinazione (Intended Audience)
- 1.3 Ambito (Scope)
- 1.4 Conformità (Compliance)
- 1.5 Definizioni di termini e convenzioni utilizzate (Definitions of Terms and Conventions Used)
- 1.5.1 Impacchettamento in byte (Packing into Bytes)
-
- Panoramica della rappresentazione compressa (Compressed Representation Overview)
-
- Rappresentazione compressa dei codici prefissi (Compressed Representation of Prefix Codes)
- 3.1 Introduzione alla codifica a prefisso (Introduction to Prefix Coding)
- 3.2 Uso della codifica a prefisso nel formato Brotli (Use of Prefix Coding in the Brotli Format)
- 3.3 Dimensioni dell'alfabeto (Alphabet Sizes)
- 3.4 Codici prefissi semplici (Simple Prefix Codes)
- 3.5 Codici prefissi complessi (Complex Prefix Codes)
-
- Codifica delle distanze (Encoding of Distances)
-
- Codifica delle lunghezze di inserimento letterale e delle lunghezze di copia (Encoding of Literal Insertion Lengths and Copy Lengths)
-
- Codifica dei comandi di cambio blocco (Encoding of Block-Switch Commands)
-
- Modellazione del contesto (Context Modeling)
- 7.1 Modalità di contesto e ricerca ID di contesto per i letterali (Context Modes and Context ID Lookup for Literals)
- 7.2 ID di contesto per le distanze (Context ID for Distances)
- 7.3 Codifica della mappa di contesto (Encoding of the Context Map)
-
- Dizionario statico (Static Dictionary)
-
- Formato dei dati compressi (Compressed Data Format)
- 9.1 Formato dell'intestazione del flusso (Format of the Stream Header)
- 9.2 Formato dell'intestazione del meta-blocco (Format of the Meta-Block Header)
- 9.3 Formato dei dati del meta-blocco (Format of the Meta-Block Data)
-
- Algoritmo di decodifica (Decoding Algorithm)
-
- Considerazioni per le implementazioni del compressore (Considerations for Compressor Implementations)
- 11.1 Compressore triviale (Trivial Compressor)
- 11.2 Allineamento dei meta-blocchi compressi ai limiti dei byte (Aligning Compressed Meta-Blocks to Byte Boundaries)
- 11.3 Creazione di parti autonome all'interno dei dati compressi (Creating Self-Contained Parts within the Compressed Data)
-
- Considerazioni sulla sicurezza (Security Considerations)
-
- Considerazioni IANA (IANA Considerations)
-
- Riferimenti informativi (Informative References)
Appendici (Appendices)
- Appendice A. Dati del dizionario statico (Static Dictionary Data)
- Appendice B. Elenco delle trasformazioni di parole (List of Word Transformations)
- Appendice C. Calcolo dei valori di controllo CRC-32 (Computing CRC-32 Check Values)
- Appendice D. Codice sorgente (Source Code)
- Ringraziamenti (Acknowledgments)
- Indirizzi degli autori (Authors' Addresses)
Panoramica
Cos'è Brotli?
Brotli è un algoritmo di compressione senza perdita di uso generico (Generic-purpose Lossless Compression Algorithm) sviluppato da Google nel 2013. È progettato per comprimere i dati con rapporti di compressione paragonabili ai migliori metodi di compressione generici attualmente disponibili, fornendo al contempo velocità di decompressione comparabili.
Caratteristiche principali
Fondamento tecnico:
- Variante dell'algoritmo LZ77 (corrispondenza della finestra scorrevole, Sliding Window Matching)
- Codifica di Huffman (codifica a prefisso, Prefix Encoding)
- Modellazione del contesto di secondo ordine (Second-order Context Modeling)
- Dizionario statico (stringhe comuni predefinite, Predefined Common Strings)
Caratteristiche di prestazione:
- Rapporto di compressione (Compression Ratio): 15-25% migliore di gzip
- Velocità di decompressione (Decompression Speed): Veloce, paragonabile a gzip
- Velocità di compressione (Compression Speed): Più lenta di gzip (regolabile per livello)
- Dimensione della finestra (Window Size): Da 1 KB a 16 MB (configurabile)
Applicazioni tipiche
1. Codifica del contenuto HTTP (HTTP Content Encoding)
Accept-Encoding: br, gzip, deflate
Content-Encoding: br
Casi d'uso principali:
- File HTML/CSS/JavaScript statici
- Font Web (WOFF2 utilizza Brotli internamente)
- Risposte API
2. Compressione dei font (Font Compression) (WOFF2)
Standard WOFF2:
- Compressione Brotli integrata
- File di font ridotti del 30-50%
- Supportato da tutti i browser moderni
3. Compressione dati offline (Offline Data Compression)
Applicazioni:
- Distribuzione di pacchetti software
- Archiviazione dati
- Risorse Android APK
Livelli di compressione (Compression Levels)
Livello Rapporto Velocità Caso d'uso
--------|----------|-----------|------------------
0 | Basso | Molto veloce| Tempo reale (non raccomandato)
1 | Basso | Veloce | Contenuto dinamico
4 | Medio | Veloce | Contenuto dinamico (predefinito)
5 | Buono | Medio | Contenuto dinamico
6 | Buono | Lento | Risorse statiche
9 | Molto buono| Molto lento| Risorse statiche
11 | Ottimale | Il più lento| Precompressione offline
Raccomandazioni:
- Contenuto dinamico: Livello 4-5
- Precompressione statica: Livello 11
- Archiviazione offline: Livello 11
Supporto browser (Browser Support)
Browser | Versione | Supporto
----------------|----------|----------
Chrome | 50+ | ✓ Completo
Firefox | 44+ | ✓ Completo
Safari | 11+ | ✓ Completo
Edge | 15+ | ✓ Completo
Opera | 36+ | ✓ Completo
IE | Tutti | ✗ Nessuno
Mobile:
iOS Safari 11+: ✓
Android Chrome: ✓
Samsung Internet: ✓
Copertura: > 95% dei browser moderni
Brotli vs Gzip
Vantaggi:
- ✓ Migliore rapporto di compressione (miglioramento del 15-25%)
- ✓ Velocità di decompressione veloce o paragonabile
- ✓ Particolarmente adatto per contenuti testuali
- ✓ Il dizionario statico migliora la compressione HTML/CSS
Svantaggi:
- ✗ Velocità di compressione più lenta
- ✗ Utilizzo CPU più elevato
- ✗ Inadatto per scenari in tempo reale ad alto QPS
- ✗ Nessun supporto nei browser legacy
Strategia di migrazione:
- Risorse statiche: Usare Brotli immediatamente
- Contenuto dinamico: Valutare prima di decidere
- QPS elevato: Mantenere gzip
- QPS basso: Può usare Brotli
- Strategia ibrida:
- Statico: Precompressione Brotli
- Dinamico: Compressione gzip in tempo reale
- Fallback: Fornire sempre gzip come backup
Risorse correlate
- Testo RFC ufficiale: RFC 7932 (TXT)
- Pagina ufficiale: RFC 7932 DataTracker
- Brotli GitHub:
https://github.com/google/brotli - RFC correlato: RFC 8878 - Compressione Zstandard
- Errata: RFC Editor Errata
Riepilogo: Brotli è un algoritmo di compressione moderno ottimizzato per il Web, particolarmente adatto per la precompressione di contenuti statici. Attraverso migliori rapporti di compressione e decompressione veloce, migliora significativamente le prestazioni Web ed è diventato un componente standard dello stack Web moderno.