HTTP/1.1 vs HTTP/2 vs HTTP/3 : transport, multiplexage, blocage en tête de ligne, compression d’en-têtes, chiffrement
Les trois versions partagent la même sémantique HTTP (RFC 9110), comme les méthodes, les codes d’état et les champs d’en-tête ; ce qui diffère, c’est le format et le transport utilisés pour les acheminer. HTTP/1.1 (RFC 9112) envoie des messages texte sur TCP et renvoie les réponses une par une sur chaque connexion. HTTP/2 (RFC 9113) découpe les messages en trames binaires et multiplexe plusieurs flux sur une seule connexion TCP. HTTP/3 (RFC 9114) utilise QUIC (RFC 9000), qui fonctionne sur UDP et prend en charge dans le transport le multiplexage des flux et le chiffrement TLS 1.3. Cela évite le blocage en tête de ligne (head-of-line blocking) de TCP, où la perte d’un seul paquet bloque tous les flux.
| Critère | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|
| Spécification | RFC 9112 (sémantique dans la RFC 9110, commune aux trois versions) | RFC 9113 | RFC 9114 (QUIC : RFC 9000) |
| Transport | TCP | TCP | QUIC (fonctionne sur UDP) |
| Format des messages | Texte : une ligne de requête et des champs d’en-tête écrits ligne par ligne | Trames binaires | Trames binaires (sur des flux QUIC) |
| Multiplexage | Aucun : une connexion traite une requête et une réponse à la fois, si bien qu’une récupération en parallèle exige d’ouvrir plusieurs connexions | Plusieurs flux sont envoyés en parallèle sur une seule connexion TCP | Plusieurs flux QUIC sont envoyés en parallèle ; les flux sont gérés par le transport |
| Blocage en tête de ligne | Se produit au niveau de la couche HTTP : sur une même connexion, la réponse suivante ne peut pas être envoyée avant la fin de la précédente (même avec le pipelining, les réponses reviennent dans l’ordre des requêtes) | Résolu au niveau de la couche HTTP, mais comme TCP livre les octets strictement dans l’ordre, la perte d’un paquet fait attendre tous les flux jusqu’à la retransmission | QUIC gère l’ordre par flux : une perte n’affecte que les flux dont des données ont été perdues |
| Compression des en-têtes | Aucune (le corps peut être compressé, mais les en-têtes sont envoyés en texte clair) | HPACK (RFC 7541) | QPACK (RFC 9204), une adaptation de HPACK qui fonctionne même lorsque les flux arrivent dans le désordre |
| Chiffrement | Facultatif : https utilise TLS, tandis que http est envoyé en clair | La spécification définit à la fois une variante sur TLS (h2) et une variante en clair (h2c) ; sur TLS, elle exige au minimum TLS 1.2. Les principaux navigateurs ne prennent en charge HTTP/2 que sur TLS | Obligatoire : TLS 1.3 est intégré à QUIC et il n’existe pas de mode en clair |
| Allers-retours pour établir la connexion | Un pour TCP, plus un autre avec TLS 1.3 : la requête part après deux allers-retours au total | Comme HTTP/1.1 (deux allers-retours pour TCP et TLS) | QUIC regroupe les poignées de main de transport et de chiffrement en un seul aller-retour ; le 0-RTT, qui envoie des données dès le tout premier envoi, est aussi disponible avec les serveurs déjà contactés |
| Lorsque le réseau change | Une connexion TCP est identifiée par les adresses et ports source et destination : un changement d’adresse IP impose une nouvelle connexion | Comme HTTP/1.1 | QUIC identifie les connexions par des identifiants de connexion : la même connexion peut se poursuivre lors du passage du Wi-Fi au réseau mobile (migration de connexion) |
Les valeurs indiquées sont des ordres de grandeur typiques et varient selon la génération de procédé et le produit.