Zum Hauptinhalt springen

1. Einführung (Introduction)

Das Hypertext Transfer Protocol (HTTP) ist ein äußerst erfolgreiches Protokoll. Die Art und Weise, wie HTTP/1.1 den zugrunde liegenden Transport ([RFC7230], Abschnitt 6) verwendet, weist jedoch mehrere Merkmale auf, die sich heute insgesamt negativ auf die Anwendungsleistung auswirken.

Insbesondere erlaubte HTTP/1.0 nur eine ausstehende Anfrage gleichzeitig auf einer bestimmten TCP-Verbindung. HTTP/1.1 fügte Request-Pipelining (Anfrage-Pipelining) hinzu, aber dies löste das Problem der gleichzeitigen Anfragen nur teilweise und leidet immer noch unter Head-of-Line-Blocking. Daher verwenden HTTP/1.0- und HTTP/1.1-Clients, die viele Anfragen stellen müssen, mehrere Verbindungen zu einem Server, um Parallelität zu erreichen und dadurch die Latenz zu reduzieren.

Darüber hinaus sind HTTP-Header-Felder (HTTP Header Fields) oft repetitiv und ausführlich, was unnötigen Netzwerkverkehr verursacht und dazu führt, dass das anfängliche TCP-Stauungsfenster (Congestion Window) [TCP] 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 ein optimiertes Mapping (Optimized Mapping) der HTTP-Semantik auf eine zugrunde liegende Verbindung definiert. Konkret ermöglicht es das Verschachteln (Interleaving) von Anfrage- und Antwortnachrichten über dieselbe Verbindung und verwendet eine effiziente Codierung für HTTP-Header-Felder. Es ermöglicht auch die Priorisierung (Prioritization) von Anfragen, 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 Datenströmen und langlebigere Verbindungen, was wiederum zu einer besseren Nutzung der verfügbaren Netzwerkkapazität führt.

Schließlich ermöglicht HTTP/2 auch eine effizientere Verarbeitung von Nachrichten durch die Verwendung von Binary Message Framing (Binäres Nachrichten-Framing).