2. HTTP/2-Protokollübersicht (HTTP/2 Protocol Overview)
HTTP/2 bietet einen optimierten Transport (Optimized Transport) für die HTTP-Semantik. HTTP/2 unterstützt alle Kernfunktionen von HTTP/1.1, zielt aber darauf ab, in mehrfacher Hinsicht effizienter zu sein.
Die grundlegende Protokolleinheit in HTTP/2 ist ein Frame (Abschnitt 4.1). Jeder Frame-Typ dient einem anderen Zweck. Zum Beispiel bilden HEADERS- und DATA-Frames die Grundlage für HTTP-Anfragen (HTTP Requests) und -Antworten (Responses) (Abschnitt 8.1); andere Frame-Typen wie SETTINGS, WINDOW_UPDATE und PUSH_PROMISE werden zur Unterstützung anderer HTTP/2-Funktionen verwendet.
Das Multiplexing (Multiplexing) von Anfragen wird erreicht, indem jeder HTTP-Anfrage-/Antwort-Austausch mit seinem eigenen Stream (Stream) (Abschnitt 5) verbunden wird. Streams sind weitgehend unabhängig voneinander, sodass eine blockierte oder verzögerte Anfrage oder Antwort den Fortschritt anderer Streams nicht verhindert.
Flusskontrolle (Flow Control) und Priorisierung (Prioritization) stellen sicher, dass gemultiplexte Streams effizient genutzt werden können. Die Flusskontrolle (Abschnitt 5.2) hilft sicherzustellen, dass nur Daten übertragen werden, die von einem Empfänger verwendet werden können. Die Priorisierung (Abschnitt 5.3) stellt sicher, dass begrenzte Ressourcen zuerst auf die wichtigsten Streams gelenkt werden können.
HTTP/2 fügt einen neuen Interaktionsmodus hinzu, bei dem ein Server Antworten an einen Client pushen kann (Abschnitt 8.2). Server-Push (Server Push) ermöglicht es einem Server, spekulativ Daten an einen Client zu senden, von denen der Server erwartet, dass der Client sie benötigt, wobei eine gewisse Netzwerknutzung gegen einen potenziellen Latenzgewinn eingetauscht wird. Der Server tut dies, indem er eine Anfrage synthetisiert, die er als PUSH_PROMISE-Frame sendet. Der Server kann dann eine Antwort auf die synthetisierte Anfrage über einen separaten Stream senden.
Da HTTP-Header-Felder, die in einer Verbindung verwendet werden, große Mengen redundanter Daten enthalten können, werden Frames, die sie enthalten, komprimiert (Abschnitt 4.3). Dies wirkt sich besonders vorteilhaft auf Anfragegrößen im üblichen Fall aus und ermöglicht es, viele Anfragen in ein Paket zu komprimieren.