HTTP/1.1 vs. HTTP/2 vs. HTTP/3: Transport, Multiplexing, Head-of-Line-Blocking
Die drei Versionen teilen dieselbe HTTP-Semantik (RFC 9110), etwa Methoden, Statuscodes und Header-Felder; unterschiedlich sind das Format und der Transport, mit dem sie übertragen werden. HTTP/1.1 (RFC 9112) sendet Textnachrichten über TCP und liefert auf jeder Verbindung die Antworten nacheinander. HTTP/2 (RFC 9113) teilt Nachrichten in binäre Frames und multiplext mehrere Streams über eine TCP-Verbindung. HTTP/3 (RFC 9114) nutzt QUIC (RFC 9000), das über UDP läuft und Stream-Multiplexing sowie TLS-1.3-Verschlüsselung im Transport übernimmt. Damit wird das Head-of-Line-Blocking von TCP vermieden, bei dem der Verlust eines einzigen Pakets alle Streams aufhält.
| Merkmal | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|
| Spezifikation | RFC 9112 (Semantik in RFC 9110, gemeinsam für alle drei Versionen) | RFC 9113 | RFC 9114 (QUIC ist RFC 9000) |
| Transport | TCP | TCP | QUIC (läuft über UDP) |
| Nachrichtenformat | Text: eine Anfragezeile und Header-Felder, eines pro Zeile | Binäre Frames | Binäre Frames (auf QUIC-Streams) |
| Multiplexing | Keines: Eine Verbindung bearbeitet jeweils nur eine Anfrage und Antwort, für paralleles Abrufen müssen mehrere Verbindungen geöffnet werden | Mehrere Streams werden parallel über eine TCP-Verbindung gesendet | Mehrere QUIC-Streams werden parallel gesendet; die Streams verwaltet der Transport |
| Head-of-Line-Blocking | Tritt auf der HTTP-Schicht auf: Auf derselben Verbindung kann die nächste Antwort erst nach der vorherigen gesendet werden (auch mit Pipelining kommen die Antworten in Anfragereihenfolge zurück) | Auf der HTTP-Schicht gelöst, aber weil TCP Bytes strikt in Reihenfolge liefert, lässt der Verlust eines Pakets alle Streams auf die Wiederholung warten | QUIC verwaltet die Reihenfolge je Stream, daher betrifft ein Verlust nur die Streams, deren Daten verloren gingen |
| Header-Kompression | Keine (der Body kann komprimiert werden, Header gehen aber als Klartext) | HPACK (RFC 7541) | QPACK (RFC 9204), eine Anpassung von HPACK, die auch funktioniert, wenn Streams in anderer Reihenfolge ankommen |
| Verschlüsselung | Optional: https nutzt TLS, http wird im Klartext gesendet | Die Spezifikation definiert sowohl über TLS (h2) als auch im Klartext (h2c); über TLS verlangt sie mindestens TLS 1.2. Die großen Browser unterstützen HTTP/2 nur über TLS | Pflicht: TLS 1.3 ist in QUIC eingebaut, einen Klartextmodus gibt es nicht |
| Umläufe bis zum Verbindungsaufbau | Einer für TCP plus einer mit TLS 1.3, sodass die Anfrage nach insgesamt zwei Umläufen gesendet wird | Wie HTTP/1.1 (zwei Umläufe für TCP und TLS) | QUIC fasst Transport- und Krypto-Handshake in einem Umlauf zusammen; für zuvor kontaktierte Server ist auch 0-RTT verfügbar, das schon im allerersten Flug Daten sendet |
| Bei einem Netzwechsel | Eine TCP-Verbindung wird über Quell- und Zieladressen und -ports identifiziert, daher ist bei geänderter IP-Adresse eine neue Verbindung nötig | Wie HTTP/1.1 | QUIC identifiziert Verbindungen über Verbindungs-IDs, daher kann dieselbe Verbindung beim Wechsel vom WLAN ins Mobilfunknetz weiterlaufen (Verbindungsmigration) |
Die Zahlenwerte sind typische Größenordnungen und variieren je nach Prozessgeneration und Produkt.