HTTP/2
Die wichtigsten Befehle zum Merken
curl --version— Protokollfähigkeiten dieser Installation prüfen.curl --http2— HTTP/2 anbieten und das ausgehandelte Ergebnis lesen.
Befehle und Optionen
| Option oder Syntax | Bedeutung |
|---|---|
--version |
curl, Bibliotheken und Feature-Liste anzeigen. |
--http2 |
HTTP/2 bei HTTPS versuchen; der Server kann HTTP/1.1 aushandeln. |
-sS |
Fortschritt ausblenden, Fehler behalten. |
-o /dev/null |
Den Body ohne Datei verwerfen. |
-w 'HTTP %{http_version}\n' |
Tatsächliche HTTP-Version und Zeilenumbruch ausgeben. |
--max-time 10 |
Auf zehn Sekunden begrenzen. |
Curl interpretiert die zitierte Ausgabevorlage. %{http_version} ist keine Shell-Variable.
Die entscheidenden Konzepte
1. HTTP/2 erhält die Bedeutung und ändert das Format
Methoden, Statuscodes, URLs und Header bleiben HTTP-Konzepte. HTTP/2 transportiert sie in binären Frames statt im textuellen HTTP/1.1-Nachrichtenformat.
Eine Anwendung kann dieselbe Ressource über beide Versionen anbieten. Eine vertraute GET-Antwort identifiziert daher kein Übertragungsprotokoll. Client und Server müssen eine unterstützte Version vereinbaren.
2. Streams teilen sich eine Verbindung
Ein Stream ist ein eigener logischer Austausch innerhalb einer HTTP/2-Verbindung. Frames mehrerer Streams können ineinandergreifen. Mehrere Anfragen laufen dadurch ohne jeweils eigene TCP-Verbindung.
Multiplexing kann Verbindungsaufwand und anwendungsseitiges Warten hinter anderen Antworten reduzieren. Es garantiert weder gleichzeitige Serverausführung noch, dass eine Anfrage keine gemeinsamen Ressourcen beansprucht.
3. Kompression und Flusskontrolle betreffen gemeinsame Ressourcen
HTTP/2 verwendet HPACK, um wiederholte Headerinformationen auf einer Verbindung zu komprimieren. Der Kompressionszustand gehört zur Verbindung, die Anfragesemantik bleibt getrennt.
Flusskontrolle begrenzt Daten pro Stream und Verbindung. Ein langsamer Empfänger kann seinen Stream bremsen; gemeinsame Grenzen beeinflussen andere. Multiplexing braucht deshalb Ressourcenverwaltung statt unbegrenzter Nebenläufigkeit.
4. Darunter liefert TCP weiterhin geordnet
HTTP/2 läuft häufig über TLS und TCP. TLS-ALPN handelt bei HTTPS das Anwendungsprotokoll aus. TCP-Paketverlust kann Bytes mehrerer HTTP/2-Streams verzögern, weil TCP seinen geordneten Strom reparieren muss.
Dieses Transport-Head-of-Line-Blocking unterscheidet sich von HTTP/1.1-Antwortreihenfolge. HTTP/2 verbessert Nebenläufigkeit, entfernt aber nicht jede gemeinsame Fehlerquelle. Eine einzelne erfolgreiche Anfrage demonstriert auch kein Multiplexing; dafür braucht es überlappende Streams.
Ein kleines Beispiel
Optional: Verwende dein installiertes curl. HTTP/2-Unterstützung der öffentlichen Beispieldomain wird nicht vorausgesetzt.
curl --version
curl --http2 -sS -o /dev/null -w 'HTTP %{http_version}\n' --max-time 10 https://example.com/
Suche HTTP2 in der Feature-Liste. Fehlt es, ist ein Optionsfehler eine lokale Build-Grenze, keine Serverablehnung. Lies danach die tatsächliche Version: 2 bestätigt HTTP/2 für diesen Transfer, 1.1 kann ausgehandelter Rückfall sein.
Fehlgeschlagene Transfers liefern möglicherweise keine nutzbare Version. Endpunktfähigkeiten und Richtlinien können wechseln. Der Body wird verworfen, GET findet trotzdem mit aktiver Zertifikatsprüfung statt.
Das prüft Fähigkeiten und Aushandlung, keine parallele Anfragenverarbeitung. Es bleibt kein lokaler Zustand zurück.
Merke dir: HTTP/2 multiplext Streams auf einer Verbindung. Prüfe die Aushandlung und beachte gemeinsame TCP-Verlustfolgen.