Passa al contenuto principale

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)

    1. 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)
    1. Panoramica della rappresentazione compressa (Compressed Representation Overview)
    1. 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)
    1. Codifica delle distanze (Encoding of Distances)
    1. Codifica delle lunghezze di inserimento letterale e delle lunghezze di copia (Encoding of Literal Insertion Lengths and Copy Lengths)
    1. Codifica dei comandi di cambio blocco (Encoding of Block-Switch Commands)
    1. 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)
    1. Dizionario statico (Static Dictionary)
    1. 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)
    1. Algoritmo di decodifica (Decoding Algorithm)
    1. 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)
    1. Considerazioni sulla sicurezza (Security Considerations)
    1. Considerazioni IANA (IANA Considerations)
    1. 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:

  1. Risorse statiche: Usare Brotli immediatamente
  2. Contenuto dinamico: Valutare prima di decidere
    • QPS elevato: Mantenere gzip
    • QPS basso: Può usare Brotli
  3. Strategia ibrida:
    • Statico: Precompressione Brotli
    • Dinamico: Compressione gzip in tempo reale
  4. Fallback: Fornire sempre gzip come backup

Risorse correlate


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.