Separate HTTP semantics from protocol versions
HTTP versions carry shared semantics through different framing, compression, multiplexing, and transport mechanisms.
- http versions
- framing
- transport
Methods and statuses do not belong to one wire version
HTTP semantics define resources, methods, statuses, fields, and representations
independently from a particular message syntax. GET and 304 Not Modified keep
their meaning across HTTP/1.1, HTTP/2, and HTTP/3 even though their wire encodings
differ.
GET /manual HTTP/1.1
Host: example.invalid
Accept: text/html
Expected result: this is an HTTP/1.1 textual serialization. A developer tool can display an HTTP/2 or HTTP/3 request similarly for readability, but those versions encode control data and fields in frames rather than sending these exact lines.
HTTP/1.1 uses a text message syntax
HTTP/1.1 uses a start line, textual field lines, and framing rules over a connection. It has no multiplexing layer, so clients commonly use multiple connections or carefully sequence exchanges. Ambiguous message framing is a security concern because peers must agree on message boundaries.
HTTP/2 adds binary framing and multiplexing over TCP
HTTP/2 maps the same semantics into frames on streams, compresses field sections
with HPACK, and allows concurrent exchanges on one connection. For HTTPS, clients
normally select h2 through TLS application protocol negotiation.
TCP still delivers one ordered byte stream. Packet loss can stall progress for otherwise independent HTTP/2 streams at the transport layer.
HTTP/3 maps HTTP onto QUIC
HTTP/3 uses QUIC streams, binary HTTP frames, and QPACK field compression. QUIC integrates TLS 1.3, provides stream-level delivery, and avoids one stream’s packet loss blocking delivery on other streams in the same way TCP can for HTTP/2.
HTTP/3 is not “HTTP without semantics” and QUIC is not merely UDP messages. QUIC provides reliable, ordered delivery within each stream plus congestion control and cryptographic protection.
Version is a hop property
A browser can use HTTP/3 to a CDN while that CDN uses HTTP/2 or HTTP/1.1 to an origin. The client-visible version describes its immediate connection. Trace each hop before linking an upstream performance or field behavior to that value.
Optimize after correctness
Version changes can improve connection use and loss behavior, but they do not fix incorrect cache directives, redirect logic, CORS policy, or method semantics. Verify the shared HTTP contract first, then measure the transport behavior on the actual path.
Primary sources
- RFC 9110 — HTTP Semantics (rfc)
- RFC 9112 — HTTP/1.1 (rfc)
- RFC 9113 — HTTP/2 (rfc)
- RFC 9114 — HTTP/3 (rfc)
