1. Introduction
Le protocole de transfert hypertexte (Hypertext Transfer Protocol, HTTP) est un protocole extrêmement réussi. Cependant, la façon dont HTTP/1.1 utilise le transport sous-jacent ([RFC7230], Section 6) présente plusieurs caractéristiques qui ont un effet global négatif sur les performances des applications aujourd'hui.
En particulier, HTTP/1.0 ne permettait qu'une seule requête en attente à la fois sur une connexion TCP donnée. HTTP/1.1 a ajouté le pipelining (pipeline de requêtes), mais cela ne résout que partiellement le problème de concurrence des requêtes et souffre toujours du blocage en tête de ligne (Head-of-Line Blocking). Par conséquent, les clients HTTP/1.0 et HTTP/1.1 qui doivent effectuer de nombreuses requêtes utilisent plusieurs connexions vers un serveur afin d'obtenir la concurrence et ainsi réduire la latence.
De plus, les champs d'en-tête HTTP (HTTP Header Fields) sont souvent répétitifs et verbeux, provoquant un trafic réseau inutile ainsi qu'un remplissage rapide de la fenêtre de congestion TCP [TCP] initiale. Cela peut entraîner une latence excessive lorsque plusieurs requêtes sont effectuées sur une nouvelle connexion TCP.
HTTP/2 résout ces problèmes en définissant un mappage optimisé (Optimized Mapping) de la sémantique HTTP vers une connexion sous-jacente. Plus précisément, il permet l'entrelacement (Interleaving) des messages de requête et de réponse sur la même connexion et utilise un codage efficace pour les champs d'en-tête HTTP. Il permet également la priorisation (Prioritization) des requêtes, permettant aux requêtes les plus importantes de se terminer plus rapidement, améliorant encore les performances.
Le protocole résultant est plus adapté au réseau car moins de connexions TCP peuvent être utilisées par rapport à HTTP/1.x. Cela signifie moins de concurrence avec d'autres flux et des connexions plus durables, ce qui conduit à une meilleure utilisation de la capacité réseau disponible.
Enfin, HTTP/2 permet également un traitement plus efficace des messages grâce à l'utilisation du fractionnement binaire des messages (Binary Message Framing).