Middle
Quelle est la différence entre HTTP/1 et HTTP/2 ?
sobes.tech IA
Réponse de l'IA
Principales différences:
- Multiplexage. HTTP/2 permet d'envoyer et de recevoir plusieurs requêtes et réponses via une seule connexion TCP simultanément. HTTP/1.1 nécessitait une connexion séparée pour chaque requête/réponse (sauf dans le cas où le mécanisme de
pipeliningétait utilisé, avec des limitations). - Compression des en-têtes. HTTP/2 utilise la compression des en-têtes avec l'algorithme HPACK pour réduire leur taille et la quantité de données transmises. En HTTP/1.1, les en-têtes sont envoyés en texte clair.
- Priorisation des flux. En HTTP/2, le client peut indiquer des priorités pour différents flux (requêtes/réponses), permettant au serveur d'optimiser l'ordre de livraison des données. HTTP/1.1 ne possède pas ce mécanisme.
- Push du serveur. HTTP/2 permet au serveur d'envoyer des ressources au client avant que celui-ci ne les demande, en se basant sur la nécessité supposée pour l'affichage de la page. En HTTP/1.1, le client doit demander explicitement chaque ressource.
- Format des trames. HTTP/2 transmet les données en format binaire (trames), ce qui facilite l'analyse et augmente l'efficacité par rapport au format texte de HTTP/1.1.
Comparaison en tableau:
| Caractéristique | HTTP/1.1 | HTTP/2 |
|---|---|---|
| Connexion | Une connexion par requête (sans pipelining) |
Une seule connexion pour plusieurs flux |
| Multiplexage | Non (ou limité par pipelining) |
Oui |
| Compression des en-têtes | Non | HPACK (compression binaire) |
| Priorisation des flux | Non | Oui |
| Push du serveur | Non | Oui |
| Format des données | Texte | Binaire (trames) |
| Blocage Head-of-Line | Présent | Partiellement résolu par multiplexage |
Exemple de requête en HTTP/1.1:
// GET /index.html HTTP/1.1
// Host: example.com
// User-Agent: curl/7.68.0
// Accept: */*
Exemple de représentation partielle des données en HTTP/2 (l'échange de trames est plus complexe et n'est pas aussi facilement illustré):
// En HTTP/2, l'interaction se fait au niveau des trames (HEADERS, DATA, etc.),
// qui sont binaires et cachées à l'utilisateur au niveau de l'application.
// Il est difficile de les représenter en texte simple à des fins d'illustration.
// Les en-têtes sont compressés et transmis dans la trame HEADERS.
// Le corps de la réponse est transmis dans les trames DATA.