HTTP/1.1 vs HTTP/2 vs HTTP/3: Transport, Multiplexing, Head-of-Line Blocking, Header Compression and Encryption
The three versions share the same HTTP semantics (RFC 9110), such as methods, status codes and header fields; what differs is the format and the transport used to carry them. HTTP/1.1 (RFC 9112) sends text messages over TCP and returns responses one at a time on each connection. HTTP/2 (RFC 9113) splits messages into binary frames and multiplexes several streams over one TCP connection. HTTP/3 (RFC 9114) uses QUIC (RFC 9000), which runs over UDP and handles stream multiplexing and TLS 1.3 encryption in the transport. This avoids TCP head-of-line blocking, where the loss of a single packet stalls every stream.
| Aspect | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|
| Specification | RFC 9112 (semantics in RFC 9110, shared by all three versions) | RFC 9113 | RFC 9114 (QUIC is RFC 9000) |
| Transport | TCP | TCP | QUIC (runs over UDP) |
| Message format | Text: a request line and header fields written one per line | Binary frames | Binary frames (on QUIC streams) |
| Multiplexing | None: one connection handles one request and response at a time, so fetching in parallel requires opening several connections | Several streams are sent in parallel over one TCP connection | Several QUIC streams are sent in parallel; the streams are managed by the transport |
| Head-of-line blocking | Occurs at the HTTP layer: on the same connection, the next response cannot be sent until the previous one finishes (even with pipelining, responses come back in request order) | Solved at the HTTP layer, but because TCP delivers bytes strictly in order, the loss of one packet makes every stream wait for the retransmission | QUIC manages ordering per stream, so a loss affects only the streams whose data was lost |
| Header compression | None (the body can be compressed, but headers are sent as plain text) | HPACK (RFC 7541) | QPACK (RFC 9204), an adaptation of HPACK that works even when streams arrive out of order |
| Encryption | Optional: https uses TLS, while http is sent in cleartext | The specification defines both over TLS (h2) and cleartext (h2c); over TLS it requires TLS 1.2 or later. Major browsers support HTTP/2 only over TLS | Mandatory: TLS 1.3 is built into QUIC, and there is no cleartext mode |
| Round trips to set up a connection | One for TCP, plus one more with TLS 1.3, so the request is sent after two round trips in total | Same as HTTP/1.1 (two round trips for TCP and TLS) | QUIC combines the transport and cryptographic handshakes into one round trip; 0-RTT, which sends data in the very first flight, is also available for servers contacted before |
| When the network changes | A TCP connection is identified by the source and destination addresses and ports, so a new connection is needed when the IP address changes | Same as HTTP/1.1 | QUIC identifies connections by connection IDs, so the same connection can continue when switching from wireless LAN to a mobile network (connection migration) |
Figures are typical orders of magnitude and vary by process generation and product.