Qu'est-ce que HTTP/2 ?

HTTP/2 est une révision majeure du protocole HTTP. Il a été publié en mai 2015 et est conçu pour améliorer les performances du web en permettant aux navigateurs d'envoyer des requêtes multiplexées aux serveurs. En retour, les serveurs peuvent envoyer des réponses multiplexées aux navigateurs, compresser les en-têtes et envoyer le contenu au navigateur avant qu'il ne soit demandé. 

Ces nouvelles fonctionnalités permettent aux serveurs et aux navigateurs qui communiquent via HTTP/2 de consommer moins de ressources, d'avoir une latence plus faible et d'être plus efficaces que ceux qui communiquent via le protocole HTTP/1.1 qui l'a précédé. 

Malgré cette amélioration, HTTP/2 ne remplace pas HTTP/1.1. L'Internet Engineering Task Force (IETF), l'organisme chargé de la mise en œuvre du protocole HTTP/2, a décidé de ne pas remplacer le protocole HTTP/1.1. responsable de la création et de la gestion de la Norme HTTPconsidère HTTP/2 comme une alternative et non comme un remplacement pour HTTP/1.1. 

Qu'est-ce que HTTP ?

Pour bien comprendre HTTP/2, il faut comprendre HTTP. HTTP (abréviation de Hypertext Transfer Protocol) est le protocole standard pour le transfert de données sur le web. Il s'agit du langage utilisé par les navigateurs et les serveurs pour communiquer entre eux. 

Par exemple, lorsqu'un utilisateur souhaite accéder à un site web, il saisit l'URL dans son navigateur. Son navigateur envoie alors une requête HTTP au serveur, demandant les fichiers contenant le texte, les images et les scripts de la page web.

Par exemple, le navigateur peut envoyer la demande suivante :

GET / HTTP/1.1
Hôte : votredomaine.com
User-Agent : Chrome/Windows
Acceptation : text/html
Accept-Language : en-US

Le serveur traite alors la demande et renvoie sa réponse au format HTTP.

HTTP/1.1 200 OK
Content-Type : text/html ; charset=UTF-8
Longueur du contenu : 1256
Date : Mon, 01 Jan 2025 12:00:00 GMT
Server : Apache
Connexion : close

La requête et la réponse ci-dessus ont été envoyées au format HTTP/1.1. Cependant, HTTP/1.1 et HTTP/2 ne sont que deux des nombreux protocoles HTTP disponibles. L'ensemble du protocole HTTP comprend

  • HTTP/0.9 (publié en 1991)
  • HTTP/1.0 (publié en 1996)
  • HTTP/1.1 (publié en 1997 et première version majeure de HTTP)
  • HTTP/2 (publié en 2015 et constitue la deuxième version majeure de HTTP)
  • HTTP/3 (publiée en 2022, c'est la troisième version majeure de HTTP)

Comment HTTP/2 améliore HTTP/1.1

HTTP/2 présente trois améliorations majeures par rapport à HTTP/1.1. Ces améliorations sont les suivantes :

  • Multiplexage
  • Compression de l'en-tête
  • Poussée du serveur

1 Multiplexage

Le multiplexage est la principale amélioration de HTTP/2 par rapport à HTTP/1.1. Il s'agit de la capacité de HTTP/2 à envoyer et recevoir simultanément plusieurs requêtes et réponses sur une seule connexion. 

Le protocole HTTP/1.1 n'avait pas cette capacité et traitait généralement les demandes de manière séquentielle. Cela signifie que le serveur doit renvoyer une réponse pour une requête précédente avant que le navigateur ne puisse procéder à la requête suivante sur la même connexion. 

Cela conduit parfois au problème du blocage en tête de ligne (HOL blocking), qui se produit lorsqu'une requête ou une réponse lente retarde les requêtes suivantes. Cela entraîne des lenteurs vitesse de chargement des pages, ce qui nuit à l expérience utilisateur pour les visiteurs. 

On peut considérer le protocole HTTP/1.1 comme une file d'attente dans laquelle la personne qui précède doit être servie avant que la personne suivante puisse l'être. Si la personne qui précède est bloquée sur le serveur pour une raison quelconque, la file d'attente est retardée et les personnes qui se trouvent à l'arrière ne sont pas servies. 

Les développeurs qui utilisent HTTP/1.1 peuvent limiter ce problème en ouvrant plusieurs connexions. Cependant, cela consomme des ressources supplémentaires et peut toujours entraîner un blocage en tête de ligne si l'une des requêtes ou des ressources est lente. 

HTTP/2 résout le problème de la tête de ligne (au niveau HTTP) en utilisant le multiplexage. Cela signifie que le navigateur envoie plusieurs requêtes à la fois, tandis que le serveur renvoie les réponses dès qu'elles sont prêtes, sans avoir à attendre que d'autres requêtes et réponses soient terminées. 

2 Compression de l'en-tête

Les requêtes et les réponses HTTP comprennent généralement un en-tête contenant des métadonnées importantes sur la requête ou la réponse. Dans le protocole HTTP/1.1, les en-têtes de ces demandes et réponses sont envoyés sous forme de texte clair, non compressé et lisible par l'homme.

Bien qu'ils soient excellents pour la lisibilité, ils ne sont pas optimisés pour la vitesse et peuvent ralentir la vitesse de chargement de votre page, en particulier lorsque vous êtes sur un réseau lent ou lorsque le navigateur et le serveur échangent de multiples requêtes et réponses.

HTTP/2 améliore cette situation en compressant l'en-tête à l'aide du format de compression d'en-tête HPACK. HPACK remplace les clés et valeurs d'en-tête couramment utilisées par des codes numériques courts, tout en fournissant un système d'encodage pour les clés et valeurs d'en-tête uniques.

Par exemple, l'en-tête HTTP/1.1 ci-dessous spécifie :

  • Le navigateur (User-Agent : Mozilla/5.0)
  • L'URL à laquelle le navigateur veut accéder (Hôte : yourdomain.com)
  • Le chemin d'accès à l'URL auquel le navigateur veut accéder (/index.html)
  • La langue dans laquelle le navigateur attend la réponse (Accept-Language : en-US)
GET /index.html HTTP/1.1
Hôte : votredomaine.com
User-Agent : Mozilla/5.0
Acceptation : text/html
Accept-Language : en-US
Connexion : keep-alive

En revanche, voici à quoi ressemblerait la requête HTTP/1.1 ci-dessus si elle était créée à l'aide du protocole HTTP/2. Comme vous pouvez le constater, le protocole HTTP/2 est illisible pour les humains. Cependant, les navigateurs et les serveurs le comprennent.

00 00 5f 01 05 00 00 00 01
82
87
84
8f
40 0a 75 73 65 72 2d 61 67 65 6e 74 0d 4d 6f 7a 69 6c 6c 61 2f 35 2e 30
40 06 61 63 63 65 70 74 09 74 65 78 74 2f 68 74 6d 6c
40 10 61 63 63 65 70 74 2d 6c 61 6e 67 75 61 67 65 05 65 6e 2d 55 53

3 Poussée du serveur

HTTP/2 permet au serveur d'envoyer des ressources au navigateur avant qu'elles ne soient demandées. Par exemple, lorsqu'un navigateur demande le fichier HTML d'une ressource, le serveur envoie le fichier HTML avec les fichiers CSS et JavaScript. 

Cette fonction, appelée "server push", est très utile car elle évite au navigateur d'envoyer plusieurs requêtes pour accéder à des ressources sur le serveur. Elle permet également aux visiteurs d'accéder rapidement au contenu et aux ressources, ce qui améliore l'expérience de l'utilisateur. 

Cependant, le push serveur peut gaspiller de la bande passante, en particulier lorsque l'utilisateur n'a pas besoin de la ressource poussée ou qu'il l'a déjà mise en cache sur son appareil. Dans l'ensemble, cette fonctionnalité est largement impopulaire et est rarement utilisée, sauf dans des cas spécifiques. 

Meilleures pratiques HTTP/2

HTTP/2 reste le protocole HTTP le plus utilisé aujourd'hui. De nombreux développeurs le préfèrent à l'ancien HTTP/1.1 et même au plus récent HTTP/3. Cela dit, il est bon de garder à l'esprit ces bonnes pratiques lors de son utilisation. 

1 N'utiliser HTTP/2 que pour les connexions HTTPS

Les navigateurs modernes ne prennent en charge le protocole HTTP/2 que lorsqu'il est utilisé sur un réseau sécurisé. Connexion HTTPS. Si la connexion n'est pas sécurisée, le système revient à HTTP/1.1. 

Vous pouvez éviter cela en incluant un Sécurité de la couche transport (TLS) certificat, également connu sous le nom de Couche de sockets sécurisée (SSL) sur les pages web et les serveurs que vous configurez pour qu'ils fonctionnent avec le certificat HTTP/2. 

2 Utiliser le Server Push avec parcimonie

La fonction "server push" de HTTP/2 peut améliorer les performances en envoyant des ressources au navigateur avant qu'il ne les demande. Toutefois, si elle accélère le temps de chargement des pages, elle peut gaspiller la bande passante, solliciter les ressources du serveur et retarder le chargement d'autres ressources essentielles. 

Pour éviter les problèmes de performances, veillez à utiliser la fonction de push du serveur avec parcimonie. De nombreux développeurs l'utilisent uniquement pour pousser des les ressources prioritaires telles que CSS et au-dessus du pli images. Pour les autres ressources, ils utilisent la valeur de préchargement HTML (rel="preload").

3 Éviter les redirections inutiles

Redirections créent des retards dans les allers-retours, ce qui peut annuler les avantages de HTTP/2. Vous pouvez réduire ce risque en spécifiant vos URLs souhaitées à l'aide d'une balise balise canonique. Il est ainsi plus probable que les moteurs de recherche reconnaissent vos URL canoniques et les utilisent.

4 Éviter le "Domain Sharding

La répartition des domaines consiste à diviser les ressources entre plusieurs sous-domaines. Cette pratique était utile dans le cadre du protocole HTTP/1.1, car elle permettait aux développeurs de contourner les limites de connexion. Cependant, cela devient contre-productif avec HTTP/2. 

HTTP/2 prend en charge le multiplexage, qui permet à plusieurs flux de partager une seule connexion. Par conséquent, la répartition des domaines n'est pas nécessaire et peut même dégrader les performances en obligeant le navigateur et le serveur à établir plusieurs connexions TLS. Cela augmente la latence et consomme des ressources supplémentaires.

🇫🇷 Français