1. Introduction (Einführung)
Die Leistung von Anwendungen, die das Hypertext Transfer Protocol (HTTP, [HTTP]) verwenden, ist damit verknüpft, wie jede HTTP-Version den zugrunde liegenden Transport nutzt und unter welchen Bedingungen der Transport arbeitet.
Das gleichzeitige Ausführen mehrerer Anfragen kann die Latenz reduzieren und die Anwendungsleistung verbessern. HTTP/1.0 erlaubte nur eine ausstehende Anfrage zu einem Zeitpunkt auf einer gegebenen TCP [TCP] Verbindung. HTTP/1.1 [HTTP/1.1] fügte Request Pipelining hinzu, aber dies löste das Problem der Request-Gleichzeitigkeit nur teilweise und leidet immer noch unter Head-of-Line Blocking auf Anwendungsebene. Daher verwenden HTTP/1.0- und HTTP/1.1-Clients mehrere Verbindungen zu einem Server, um gleichzeitige Anfragen zu stellen.
Darüber hinaus sind HTTP-Felder oft repetitiv und verbose, was unnötigen Netzwerkverkehr verursacht und dazu führt, dass das anfängliche TCP-Staukontrollfenster (Congestion Window) schnell gefüllt wird. Dies kann zu übermäßiger Latenz führen, wenn mehrere Anfragen über eine neue TCP-Verbindung gestellt werden.
HTTP/2 behebt diese Probleme, indem es eine optimierte Abbildung (Optimized Mapping) der HTTP-Semantik auf eine zugrunde liegende Verbindung definiert. Konkret ermöglicht es das Verschachteln von Nachrichten (Interleaving of Messages) auf derselben Verbindung und verwendet eine effiziente Kodierung (Efficient Coding) für HTTP-Felder. Es ermöglicht auch die Priorisierung von Anfragen (Prioritization of Requests), sodass wichtigere Anfragen schneller abgeschlossen werden können, was die Leistung weiter verbessert.
Das resultierende Protokoll ist netzwerkfreundlicher, da im Vergleich zu HTTP/1.x weniger TCP-Verbindungen verwendet werden können. Dies bedeutet weniger Konkurrenz mit anderen Flows und langlebigere Verbindungen, was wiederum zu einer besseren Nutzung der verfügbaren Netzwerkkapazität führt. Beachten Sie jedoch, dass TCP Head-of-Line Blocking von diesem Protokoll nicht adressiert wird.
Schließlich ermöglicht HTTP/2 auch eine effizientere Verarbeitung von Nachrichten durch die Verwendung von binärem Message Framing (Binary Message Framing).
Dieses Dokument ersetzt RFC 7540 und RFC 8740. Anhang B listet bemerkenswerte Änderungen auf.