Middle
Was ist der Unterschied zwischen HTTP/1 und HTTP/2?
sobes.tech KI
Antwort von AI
Hauptunterschiede:
- Multiplexing. HTTP/2 ermöglicht das Senden und Empfangen mehrerer Anfragen und Antworten über eine einzelne TCP-Verbindung gleichzeitig. HTTP/1.1 erforderte eine separate Verbindung für jede Anfrage/Antwort (außer bei Verwendung des
pipelining-Mechanismus, der Einschränkungen hatte). - Header-Kompression. HTTP/2 verwendet die HPACK-Kompression für Header, um deren Größe und die übertragenen Daten zu reduzieren. Bei HTTP/1.1 werden Header im Textformat gesendet.
- Stream-Priorisierung. In HTTP/2 kann der Client Prioritäten für verschiedene Streams (Anfragen/Antworten) angeben, was dem Server ermöglicht, die Datenlieferung zu optimieren. HTTP/1.1 hat kein solches Mechanismus.
- Server Push. HTTP/2 erlaubt es dem Server, Ressourcen an den Client zu senden bevor dieser sie anfordert, basierend auf der Annahme, dass sie für die Anzeige der Seite notwendig sind. Bei HTTP/1.1 muss der Client jede Ressource explizit anfordern.
- Frame-Format. HTTP/2 überträgt Daten im binären Format (Frames), was das Parsen erleichtert und die Effizienz im Vergleich zum Textformat von HTTP/1.1 erhöht.
Vergleichstabelle:
| Merkmal | HTTP/1.1 | HTTP/2 |
|---|---|---|
| Verbindung | Eine Verbindung pro Anfrage (ohne pipelining) |
Eine Verbindung für mehrere Streams |
| Multiplexing | Nein (oder eingeschränkt durch pipelining) |
Ja |
| Header-Kompression | Nein | HPACK (binäre Kompression) |
| Stream-Priorisierung | Nein | Ja |
| Server Push | Nein | Ja |
| Datenformat | Text | Binär (Frames) |
| Head-of-Line-Blocking | Vorhanden | Teilweise durch Multiplexing gelöst |
Beispiel für eine Anfrage in HTTP/1.1:
// GET /index.html HTTP/1.1
// Host: example.com
// User-Agent: curl/7.68.0
// Accept: */*
Beispiel für eine teilweise Darstellung von Daten in HTTP/2 (der Austausch von Frames ist komplexer und wird hier nicht so einfach gezeigt):
// In HTTP/2 erfolgt die Interaktion auf Frame-Ebene (HEADERS, DATA usw.),
// die binär sind und auf Anwendungsebene für den Benutzer verborgen sind.
// Es ist schwierig, sie nur zur Veranschaulichung in einfachem Text darzustellen.
// Header werden komprimiert und im HEADERS-Frame übertragen.
// Der Antwortkörper wird in DATA-Frames übertragen.