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
POSTundHEAD, 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