Junior
Parlez des versions de HTTP et de leurs différences.
sobes.tech IA
Réponse de l'IA
Versions principales de HTTP:
- HTTP/0.9: Version de base pour la transmission de documents HTML simples. Ne supportait que la méthode
GET, sans en-têtes ni statuts de réponse. - HTTP/1.0: Introduction du support pour les en-têtes (Content-Type, User-Agent), méthodes
POSTetHEAD, et statuts de réponse. La connexion était fermée après chaque requête/réponse. - HTTP/1.1: Améliorations significatives:
- Connexions persistantes (Persistent Connections) - réutilisation de la connexion TCP pour plusieurs requêtes.
- Pipelining - envoi de plusieurs requêtes sans attendre la réponse précédente (mal implémenté et peu utilisé).
- Hôtes virtuels (en-tête Host).
- Requêtes GET partielles (en-tête Range).
- Mise en cache (Cache-Control, ETag, Last-Modified).
- Méthodes PUT et DELETE.
- HTTP/2: Protocole basé sur SPDY de Google. Principales différences:
- Protocole binaire au lieu de texte - parsing plus efficace.
- Multiplexage - transmission parallèle de plusieurs requêtes/réponses sur une seule connexion TCP. Élimine le problème de "head-of-line blocking" dans le pipelining HTTP/1.1.
- Compression des en-têtes (HPACK) - réduction de la taille des données transmises.
- Priorisation (Server Push) - le serveur peut envoyer des ressources que le client utilisera probablement avant qu'il ne les demande.
- HTTP/3: Basé sur UDP (avec QUIC - Quick UDP Internet Connections) au lieu de TCP. Axé sur l'amélioration des performances, notamment dans les réseaux instables:
- Élimination du "head-of-line blocking" au niveau de la connexion TCP. Si un paquet est perdu en TCP, tous les paquets suivants sont bloqués jusqu'à sa retransmission. En QUIC (et HTTP/3), seul le flux auquel appartient le paquet perdu est bloqué.
- Établissement de connexion plus rapide (0-RTT ou 1-RTT).
- QUIC inclut ses propres mécanismes de contrôle de flux et de fiabilité.
Différences principales dans le tableau:
| Fonctionnalité | HTTP/1.0 | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|---|
| Protocole | TCP | TCP | TCP | UDP (QUIC) |
| Format | Texte | Texte | Binaire | Binaire |
| Connexion par défaut | Temporaire | Permanente | Permanente (multiplexage) | Permanente (Streams QUIC) |
| Multiplexage | Non | Imitation (Pipelining) | Oui | Oui |
| Compression des en-têtes | Non | Non | HPACK | QPACK (dans QUIC) |
| Server Push | Non | Non | Oui | Oui |
| Blocage HOL (TCP) | Oui (au niveau de la requête) | Oui (au niveau de la requête) | Oui (au niveau de la connexion) | Non (au niveau du flux) |
Exemple de requête en HTTP/1.1:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: curl/7.64.1
Accept: */*
Exemple de requête en HTTP/2 (conceptuel, car binaire):
// Requête 1 : Obtenir /index.html
// :method = GET
// :path = /index.html
// :authority = www.example.com
// Requête 2 : Obtenir /style.css
// :method = GET
// :path = /style.css
// :authority = www.example.com
// ...transmises en parallèle sur une seule connexion