Sobes.tech
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 POST et HEAD, 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