Aller au contenu principal

RFC 7932 - Format de données compressées Brotli

Date de publication : Juillet 2016
Statut : Informationnel (Informational)
Auteurs : J. Alakuijala (Google Inc.), Z. Szabadka (Google Inc.)


Résumé (Abstract)

Cette spécification définit un format de données compressées sans perte (Lossless Compressed Data Format) qui compresse les données en utilisant une combinaison de l'algorithme LZ77 et du codage de Huffman, avec une efficacité comparable aux meilleures méthodes de compression à usage général actuellement disponibles.


Statut de ce mémo (Status of This Memo)

Ce document n'est pas une spécification de la norme Internet ; il est publié à des fins d'information.

Ce document est un produit de l'Internet Engineering Task Force (IETF). Il a été approuvé pour publication par l'Internet Engineering Steering Group (IESG). Tous les documents approuvés par l'IESG ne sont pas candidats à un niveau quelconque de norme Internet ; voir la section 2 de la RFC 7841.

Les informations sur le statut actuel de ce document, les erratas éventuels et la manière de fournir des commentaires peuvent être obtenues à l'adresse http://www.rfc-editor.org/info/rfc7932.


Table des matières (Table of Contents)

    1. Introduction
    • 1.1 Objectif (Purpose)
    • 1.2 Public cible (Intended Audience)
    • 1.3 Portée (Scope)
    • 1.4 Conformité (Compliance)
    • 1.5 Définitions des termes et conventions utilisés (Definitions of Terms and Conventions Used)
      • 1.5.1 Empaquetage dans les octets (Packing into Bytes)
    1. Aperçu de la représentation compressée (Compressed Representation Overview)
    1. Représentation compressée des codes de préfixe (Compressed Representation of Prefix Codes)
    • 3.1 Introduction au codage de préfixe (Introduction to Prefix Coding)
    • 3.2 Utilisation du codage de préfixe dans le format Brotli (Use of Prefix Coding in the Brotli Format)
    • 3.3 Tailles d'alphabet (Alphabet Sizes)
    • 3.4 Codes de préfixe simples (Simple Prefix Codes)
    • 3.5 Codes de préfixe complexes (Complex Prefix Codes)
    1. Encodage des distances (Encoding of Distances)
    1. Encodage des longueurs d'insertion littérale et des longueurs de copie (Encoding of Literal Insertion Lengths and Copy Lengths)
    1. Encodage des commandes de changement de bloc (Encoding of Block-Switch Commands)
    1. Modélisation de contexte (Context Modeling)
    • 7.1 Modes de contexte et recherche d'ID de contexte pour les littéraux (Context Modes and Context ID Lookup for Literals)
    • 7.2 ID de contexte pour les distances (Context ID for Distances)
    • 7.3 Encodage de la carte de contexte (Encoding of the Context Map)
    1. Dictionnaire statique (Static Dictionary)
    1. Format de données compressées (Compressed Data Format)
    • 9.1 Format de l'en-tête de flux (Format of the Stream Header)
    • 9.2 Format de l'en-tête de méta-bloc (Format of the Meta-Block Header)
    • 9.3 Format des données de méta-bloc (Format of the Meta-Block Data)
    1. Algorithme de décodage (Decoding Algorithm)
    1. Considérations pour les implémentations de compresseur (Considerations for Compressor Implementations)
    • 11.1 Compresseur trivial (Trivial Compressor)
    • 11.2 Alignement des méta-blocs compressés sur les limites d'octets (Aligning Compressed Meta-Blocks to Byte Boundaries)
    • 11.3 Création de parties autonomes dans les données compressées (Creating Self-Contained Parts within the Compressed Data)
    1. Considérations de sécurité (Security Considerations)
    1. Considérations IANA (IANA Considerations)
    1. Références informatives (Informative References)

Annexes (Appendices)

  • Annexe A. Données du dictionnaire statique (Static Dictionary Data)
  • Annexe B. Liste des transformations de mots (List of Word Transformations)
  • Annexe C. Calcul des valeurs de vérification CRC-32 (Computing CRC-32 Check Values)
  • Annexe D. Code source (Source Code)
  • Remerciements (Acknowledgments)
  • Adresses des auteurs (Authors' Addresses)

Aperçu

Qu'est-ce que Brotli ?

Brotli est un algorithme de compression sans perte à usage général (Generic-purpose Lossless Compression Algorithm) développé par Google en 2013. Il est conçu pour compresser les données avec des taux de compression comparables aux meilleures méthodes de compression à usage général actuellement disponibles, tout en offrant des vitesses de décompression comparables.

Caractéristiques principales

Fondation technique :

  • Variante de l'algorithme LZ77 (correspondance de fenêtre coulissante, Sliding Window Matching)
  • Codage de Huffman (encodage de préfixe, Prefix Encoding)
  • Modélisation de contexte de second ordre (Second-order Context Modeling)
  • Dictionnaire statique (chaînes communes prédéfinies, Predefined Common Strings)

Caractéristiques de performance :

  • Taux de compression (Compression Ratio) : 15-25% meilleur que gzip
  • Vitesse de décompression (Decompression Speed) : Rapide, comparable à gzip
  • Vitesse de compression (Compression Speed) : Plus lent que gzip (ajustable par niveau)
  • Taille de fenêtre (Window Size) : 1 Ko à 16 Mo (configurable)

Applications typiques

1. Encodage de contenu HTTP (HTTP Content Encoding)

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

Cas d'utilisation principaux :

  • Fichiers HTML/CSS/JavaScript statiques
  • Polices Web (WOFF2 utilise Brotli en interne)
  • Réponses API

2. Compression de polices (Font Compression) (WOFF2)

Norme WOFF2 :

  • Compression Brotli intégrée
  • Fichiers de polices réduits de 30 à 50%
  • Pris en charge par tous les navigateurs modernes

3. Compression de données hors ligne (Offline Data Compression)

Applications :

  • Distribution de paquets logiciels
  • Archivage de données
  • Ressources Android APK

Niveaux de compression (Compression Levels)

Niveau  Taux       Vitesse     Cas d'utilisation
------|----------|-----------|------------------
0 | Faible | Très rapide| Temps réel (non recommandé)
1 | Faible | Rapide | Contenu dynamique
4 | Moyen | Rapide | Contenu dynamique (par défaut)
5 | Bon | Moyen | Contenu dynamique
6 | Bon | Lent | Ressources statiques
9 | Très bon | Très lent | Ressources statiques
11 | Optimal | Le plus lent| Précompression hors ligne

Recommandations :

  • Contenu dynamique : Niveau 4-5
  • Précompression statique : Niveau 11
  • Archivage hors ligne : Niveau 11

Support des navigateurs (Browser Support)

Navigateur      | Version | Support
----------------|---------|----------
Chrome | 50+ | ✓ Complet
Firefox | 44+ | ✓ Complet
Safari | 11+ | ✓ Complet
Edge | 15+ | ✓ Complet
Opera | 36+ | ✓ Complet
IE | Tous | ✗ Aucun

Mobile :
iOS Safari 11+ : ✓
Android Chrome : ✓
Samsung Internet : ✓

Couverture : > 95% des navigateurs modernes

Brotli vs Gzip

Avantages :

  • ✓ Meilleur taux de compression (amélioration de 15-25%)
  • ✓ Vitesse de décompression rapide ou comparable
  • ✓ Particulièrement adapté au contenu textuel
  • ✓ Le dictionnaire statique améliore la compression HTML/CSS

Inconvénients :

  • ✗ Vitesse de compression plus lente
  • ✗ Utilisation CPU plus élevée
  • ✗ Inadapté aux scénarios en temps réel à QPS élevé
  • ✗ Pas de support dans les anciens navigateurs

Stratégie de migration :

  1. Ressources statiques : Utiliser Brotli immédiatement
  2. Contenu dynamique : Évaluer avant de décider
    • QPS élevé : Conserver gzip
    • QPS faible : Peut utiliser Brotli
  3. Stratégie hybride :
    • Statique : Précompression Brotli
    • Dynamique : Compression gzip en temps réel
  4. Solution de secours : Toujours fournir gzip comme solution de repli

Ressources connexes


Résumé : Brotli est un algorithme de compression moderne optimisé pour le Web, particulièrement adapté à la précompression de contenu statique. Grâce à de meilleurs taux de compression et une décompression rapide, il améliore considérablement les performances Web et est devenu un composant standard de la pile Web moderne.