HTTP/3: das neue HTTP-Protokoll auf Basis von U

HTTP3 timeline

HTTP/3, das neue HTTP-Protokoll auf Basis von UDP, ist die neue Version des HTTP-Protokolls. Die IETF (Internet Engineering Task Force) ist im November 2018 in Bangkok zusammengekommen, um diesen neuen Internet-Entwurf zu verabschieden. Mit Stand im Mai 2021 ist das HTTP/3-Protokoll noch ein Internet-Entwurf, aber Unternehmen wie Google, Microsoft oder Facebook nutzen es bereits, um das Web zu beschleunigen. Nach Daten über die Nutzung von HTTP/3 auf W3Techs unterstützen bereits etwa 19 % aller Websites HTTP/3.

Was ist HTTP/3?

Das Protokoll HTTP/3 ist die neue Version des Hypertext Transfer Protocol (HTTP) und basiert auf dem UDP-Protokoll. Zuvor war es als HTTP-over-QUIC bekannt. Das Netzwerkprotokoll QUIC wurde ursprünglich von Google entwickelt und wird HTTP/2 ersetzen. Die Entwicklung von HTTP/3 hat bereits vor Jahren angefangen und verfolgt das Ziel, die Ladegeschwindigkeit im Internet zu beschleunigen, indem grundlegende Änderungen am Verfahren zur Datenübertragung vorgenommen werden.

HTTP/3 profitiert von den Eigenschaften des UDP-Protokolls und definiert viele der neuen Funktionen, die in früheren HTTP-Versionen in der TCP-Schicht vorhanden waren. Auf diese Weise können die bestehenden Beschränkungen in der Internet-Infrastruktur beseitigt werden. Wo HTTP/1.1 und HTTP/2 in der Transportschicht TCP verwendeten, nutzt HTTP/3 QUIC, um eines der Hauptprobleme von HTTP/2 mit Blick auf den linearen Fortschritt von Downloads zu lösen.

HTTP/2 entschärft zwar das „Head-of-Line-Blocking“-Problem dank Multiplexing, ist aber immer noch durch TCP eingeschränkt. Denn obgleich es die Verwendung einer einzigen TCP-Verbindung für mehrere Übertragungen ermöglicht, wird bei einem Paketverlust die gesamte Verbindung unterbrochen, während darauf gewartet wird, dass TCP das verlorene Paket erneut überträgt. HTTP/3 ist dank seiner Integration in das verbindungslose UDP-Protokoll nicht durch dieses Blockierungsproblem eingeschränkt.

Durch natives Multiplexing ermöglicht QUIC, dass sich verlorene Pakete nur auf die Übertragungen auswirken, bei denen Daten verloren gegangen sind. Neue Streams in einer QUIC-Verbindung müssen somit nicht warten, bis die anderen beendet sind. Außerdem entfällt auch der Overhead für den TCP-Handshake, wodurch sich die Latenz verringert. Was Zuverlässigkeit anbelangt, fehlen QUIC einige Merkmale des TCP-Protokolls. Aber das macht es über die UDP-Schicht wett, da es eine erneute Übertragung von Paketen, Anforderung etc. ermöglicht.

Transportschicht: TCP vs. UDP

TCP: Transport Control Protocol

Die Abkürzung TCP steht für Transport Control Protocol. Dieses Protokoll liegt über der Internet Protocol-Schicht (IP). TCP ist die Grundlage für viele Internetprotokolle und -dienste und hat unter anderem folgende Aufgaben:

  • De betrou
  • Die erforderliche Zuverlässigkeit für das Internet, Dateiübertragung etc. bieten.
  • Aufbau einer mehrstufigen Verbindung, Gewährleistung der Reihenfolge der Pakete und erneute Übertragung verlorener Pakete.
  • Eine Prüfsummenberechnung zur Fehlererkennung bieten.

In Bezug auf Zuverlässigkeit hat das TCP-Protokoll jedoch auch eine wichtige Einschränkung: der Overhead durch die vielen Roundtrips, die zur Garantie einer korrekten Übermittlung der Informationen notwendig sind. Aus diesem Grund ist TCP zu einem Engpass für Geschwindigkeitsverbesserung geworden. HTTP/2 bietet in dieser Hinsicht jedoch Verbesserungen, wie weiter unten erläutert ist.

Die Spezifikation des TCP-Protokolls geht auf die Jahre 1974 und 1981 zurück (RFC 675 bzw. RFC 793). Seitdem hat es in diesem Protokoll keine nennenswerten Änderungen mehr gegeben, da es tief in Betriebssysteme, Firmware etc. integriert ist und eine Umstellung keine leichte Aufgabe ist.

UDP: User Datagram Protocol

Die Abkürzung UDP steht für User Datagram Protocol. UDP ist ein verbindungsloses Protokoll auf Basis von Datagrammen ohne Zustellungsgarantien. Informationsübermittlung, Datenintegrität etc. sind an die Anwendungsschicht delegiert. Das UDP-Protokoll wird hauptsächlich für Anwendungen wie unter anderem VoIP, DNS, DHCP und BOOTP verwendet. Die Spezifikationen für das UDP-Paketformat sind minimal. Sein Header besteht aus:

  • Bron- e
  • Quell- und Zielport
  • Länge (in Bytes) des Paketkopfes und der Paketdaten
  • und der Prüfsumme zur Überprüfung der Datenintegrität (optional bei IPv4 und obligatorisch bei IPv6).

Die Spezifikation des UDP-Protokolls stammt aus dem Jahr 1980 (RFC 768), und es ist ebenfalls weit verbreitet. Jede wesentliche Verbesserung würde deshalb erhebliche Änderungen an der Firmware von mit dem Internet verbundenen Geräten und in Betriebssystemen notwendig machen.

Netzwerkprotokoll QUIC

Die Abkürzung QUIC steht für Quick UDP Internet Connections. QUIC, von Jim Roskind bei Google im Jahr 2012 entwickelt, ist ein Netzwerkprotokoll über die UDP-Transportschicht. Googles QUIC-Version war nur auf HTTP-Transport ausgerichtet und verwendete die Syntax von HTTP/2. Für seine Standardisierung geht die IETF jedoch weiter.

Mit QUIC werden die Grenzen der Netzwerkschichten, der Kommunikation, der Zuverlässigkeitsmerkmale und der Sicherheitsmerkmale im „User-Space“ neu definiert. Auf diese Weise entfällt die Notwendigkeit, die Kernel von internetweiten Systemen zu aktualisieren. Dennoch bringt die Nutzung von UDP Vorteile wie Nachteile für QUIC und HTTP/3 mit sich. Eine Herausforderung ist die CPU-Last, die sich nach manchen Schätzungen mit QUIC im Vergleich zu HTTP/2 verdoppeln kann. Der Grund ist, dass Betriebssysteme und Software nicht für die Verwendung von UDP optimiert sind, weil TCP seit langem das wichtigste Protokoll ist.

Außerdem ist die Verwendung von TLS für QUIC-Verbindungen obligatorisch, damit zwischengeordnete Geräte Datenverkehr nicht verändern oder erkennen können. QUIC-Streams haben eine ID, die angibt, wer die Übertragung startet, und sie werden über unidirektionale oder bidirektionale QUIC-Verbindungen gesendet.

Die von der IETF vorgeschlagene Implementierung von HTTP/3 umfasst auch die Vorgängerversionen, um Kompatibilität zu gewährleisten. Wie in RFC 7838 definiert, informiert ein Header den Client über die Verfügbarkeit von HTTP/3, zusammen mit den Portangaben.

Implementierung von HTTP/3

Im Mai 2021 unterstützten die Browser Google Chrome, Firefox, Safari und Microsoft Edge bereits HTTP/3 – zumindest als experimentelle Funktion, während auf seine Standardisierung gewartet wird. Gleiches gilt für Server wie Litespeed Web Server, HAProxy 2.3 oder Caddy Web Server.

Darüber hinaus gibt es einige Open-Source-Bibliotheken mit Implementierungen von HTTP-over-QUIC, wie z. B.: neqo von Mozilla, Cronet von Google, proxygen von Facebook, lsquic von LiteSpeed, aioquic, quic-go oder nghttp3. Auf GitHub gibt es eine vollständige Übersicht der verfügbaren Bibliotheken, die in verschiedenen Programmiersprachen (C, C++, Rust, Python…) entwickelt wurden.

HTTP-Versionen

Die erste Version von HTTP wurde im Jahr 1991 als HTTP/0.9 veröffentlicht. HTTP/1.0 und HTTP/1.1 kamen danach 1996 bzw. 1999. Mit der Entwicklung des Internets und des Webs wurde das Protokoll ständig vervollkommnet, um die Datenübertragung über das Netzwerk zu verbessern. Bis zur Veröffentlichung von HTTP/2 im Jahr 2015 gab es jedoch keine wesentlichen Änderungen. Diese neue Version verbesserte die Datenübertragung und ermöglichte es, die Ladegeschwindigkeit von Webseiten erheblich zu beschleunigen. HTTP/3 ist die nächste Version, von der erwartet wird, dass sie die Internetgeschwindigkeit weiter verbessert.

Verbesserungen in HTTP/2

Das Protokoll HTTP/2 hat bereits ein paar interessante Verbesserungen mit sich gebracht, wie z. B.:

  • Überwinden bestimmter Beschränkungen des TCP-Protokolls durch Verbesserungen wie nicht blockierende Downloads, Pipelining und Server-Push.
  • Minimieren der Zahl der Anfrage-Antwort-Zyklen und folglich Verbesserung der Ladegeschwindigkeit.
  • Senden mehrerer Ressourcen über eine einzige TCP-Verbindung (Multiplexing).
  • Verbessern der Flexibilität beim Herunterladen von statischen Ressourcen und Aufhebung des linearen Fortschritts der Download-Beschränkung. Das bedeutet, dass eine große JavaScript-Ressource nicht unbedingt das Laden anderer statischer Ressourcen beeinträchtigen muss.
HTTP/3, het nieuwe HTTP-protocol op basis van UDP

Zu dieser Liste müssen wir HPACK-Kompression des HTTP/2-Headers und das Standard-Binärformat für Datenübertragung hinzufügen. Das hat die Effizienz des Protokolls erheblich verbessert.

Um HTTP/2 optimal nutzen zu können, haben die wichtigsten Browser außerdem die Verwendung von SSL zur Pflicht gemacht. Das führte dazu, dass Geschwindigkeitsverbesserungen in manchen Fällen unbedeutend waren.

HPACK infografiek

Kurzum: Die Weiterentwicklung grundlegender Protokolle (wie HTTP) ist im sich ständig wandelnden Kontext des Internets und des Web unerlässlich. Mit Blick auf die neue Version dieses Protokolls gibt es verschiedene Ansätze. Es gibt die Auffassung, dass da der HTTP/2-Standard noch keine volle Annahme gefunden hat, es womöglich noch zu früh ist, eine neue Version einzuführen.

Dennoch ist der Erfolg der mit HTTP/3 durchgeführten Tests ermutigend, da das Protokoll für alle Nutzer sehr vorteilhaft wäre. Wie bereits erwähnt, unterstützen die wichtigsten Browser bereits HTTP/3, und Unternehmen wie Google, Mozilla, Facebook oder Akamai nutzen dieses neue Protokoll bereits seit Jahren.