Sobes.tech
Junior

Erzählen Sie uns von den HTTP-Versionen und ihren Unterschieden.

sobes.tech KI

Antwort von AI

Hauptversionen von HTTP:

  • HTTP/0.9: Grundversion für die Übertragung einfacher HTML-Dokumente. Unterstützte nur die Methode GET, keine Header, keine Statuscodes.
  • HTTP/1.0: Einführung der Unterstützung für Header (Content-Type, User-Agent), Methoden POST und HEAD, Statuscodes. Die Verbindung wurde nach jeder Anfrage/Antwort geschlossen.
  • HTTP/1.1: Bedeutende Verbesserungen:
    • Persistente Verbindungen - Wiederverwendung der TCP-Verbindung für mehrere Anfragen.
    • Pipelining - Senden mehrerer Anfragen ohne Warten auf die Antwort (schlecht implementiert und selten genutzt).
    • Virtuelle Hosts (Host-Header).
    • Teilweise GET-Anfragen (Range-Header).
    • Caching (Cache-Control, ETag, Last-Modified).
    • Methoden PUT und DELETE.
  • HTTP/2: Basierend auf Googles SPDY-Protokoll. Hauptunterschiede:
    • Binäres Protokoll statt Text - effizienteres Parsen.
    • Multiplexing - parallele Übertragung mehrerer Anfragen/Antworten über eine Verbindung. Eliminierung des "head-of-line blocking"-Problems bei HTTP/1.1 Pipelining.
    • Header-Kompression (HPACK) - Reduzierung der übertragenen Datenmenge.
    • Priorisierung (Server Push) - Server kann Ressourcen senden, die wahrscheinlich vom Client benötigt werden, bevor er sie anfordert.
  • HTTP/3: Basierend auf UDP (mit QUIC - Quick UDP Internet Connections) statt TCP. Ziel ist die Leistungsverbesserung, besonders in instabilen Netzwerken:
    • Beseitigung des "head-of-line blocking" auf Verbindungsebene. Bei Paketverlust in TCP sind alle nachfolgenden Pakete blockiert, bis das verlorene Paket neu gesendet wird. Bei QUIC (und HTTP/3) betrifft das nur den Fluss, dem das verlorene Paket gehört.
    • Schnellere Verbindungsherstellung (0-RTT oder 1-RTT).
    • QUIC beinhaltet eigene Mechanismen zur Flusskontrolle und Zuverlässigkeit.

Hauptunterschiede in der Tabelle:

Funktion HTTP/1.0 HTTP/1.1 HTTP/2 HTTP/3
Protokoll TCP TCP TCP UDP (QUIC)
Format Text Text Binär Binär
Standardverbindung Kurzlebig Dauerhaft Dauerhaft (Multiplexing) Dauerhaft (QUIC Streams)
Multiplexing Nein Nachahmung (Pipelining) Ja Ja
Header-Kompression Nein Nein HPACK QPACK (in QUIC)
Server Push Nein Nein Ja Ja
HOL-Blocking (TCP) Ja (auf Anfrageebene) Ja (auf Anfrageebene) Ja (auf Verbindungsebene) Nein (auf Flussebene)

Beispielanfrage in HTTP/1.1:

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: curl/7.64.1
Accept: */*

Beispielanfrage in HTTP/2 (konzeptuell, da binär):

// Anfrage 1: Hole /index.html
// :method = GET
// :path = /index.html
// :authority = www.example.com

// Anfrage 2: Hole /style.css
// :method = GET
// :path = /style.css
// :authority = www.example.com
// ...werden parallel über eine Verbindung übertragen