Vetora logo
🌐Networking & Protocols

HTTP/1.1 vs HTTP/2 vs HTTP/3

The evolution from HTTP/1.1 through HTTP/2 to HTTP/3 represents a progression from text-based serial requests over TCP, to binary multiplexed streams over TCP, to multiplexed streams over QUIC/UDP with per-stream loss recovery and 0-RTT connection resumption.

Overview

HTTP (Hypertext Transfer Protocol) is the application-layer protocol that powers the web. Its evolution across three major versions reflects the changing demands of web applications -- from static document retrieval to complex, latency-sensitive single-page applications serving billions of users. Understanding the differences between HTTP/1.1, HTTP/2, and HTTP/3 is critical for system design because the choice of HTTP version affects page load performance, server resource utilization, and infrastructure requirements for CDNs, load balancers, and API gateways.

HTTP/1.1, standardized in 1997 (RFC 2068, revised as RFC 2616 and then RFC 7230-7235), introduced persistent connections (keep-alive) so clients could reuse a TCP connection for multiple requests instead of opening a new one for each resource. However, HTTP/1.1 processes requests sequentially on each connection: the client must wait for the response to request N before sending request N+1 (head-of-line blocking at the application layer). While pipelining was theoretically supported, it was poorly implemented by proxies and servers and was never widely adopted. To work around this, browsers open 6-8 parallel TCP connections per origin, leading to TCP congestion control contention, redundant TLS handshakes, and inefficient use of network resources. Techniques like domain sharding, CSS sprites, and resource inlining emerged as workarounds but added complexity to application development.

HTTP/2, standardized in 2015 (RFC 7540) and derived from Google's SPDY protocol, fundamentally changed how HTTP requests are transmitted. HTTP/2 introduces binary framing: requests and responses are broken into small frames that are interleaved (multiplexed) on a single TCP connection. Multiple streams can be in-flight simultaneously, eliminating application-layer head-of-line blocking. HPACK header compression reduces redundant header bytes (cookies, user-agent, etc.) that were sent with every HTTP/1.1 request. Server push allows the server to proactively send resources the client will need (though this feature saw limited adoption and was deprecated in some implementations). HTTP/2 reduced page load times by 15-50% compared to HTTP/1.1 and is now the default for major CDNs and web servers. However, HTTP/2 still runs over TCP, which means transport-layer head-of-line blocking persists: a single lost TCP packet blocks all multiplexed streams.

HTTP/3, standardized in 2022 (RFC 9114), replaces TCP with QUIC (RFC 9000) as the transport protocol. QUIC runs over UDP and provides per-stream flow control and loss recovery, meaning a lost packet on one stream does not block other streams -- solving the transport-layer head-of-line blocking that plagued HTTP/2. QUIC integrates TLS 1.3 directly into its handshake, reducing connection setup from 2-3 RTTs (TCP + TLS) to 1 RTT, or 0 RTT for resumed connections. QPACK (the HTTP/3 analog of HPACK) provides header compression adapted for QUIC's out-of-order delivery. By 2026, HTTP/3 adoption has reached approximately 30% of global web traffic, with CDNs like Cloudflare, Fastly, and Akamai supporting it by default. The benefits are most pronounced on lossy mobile networks, where TCP's sensitivity to packet loss causes disproportionate performance degradation.

Key Points
  • 1HTTP/1.1 suffers from application-layer head-of-line blocking: on a single connection, requests are processed sequentially. Browsers work around this by opening 6-8 TCP connections per origin, wasting resources and causing TCP congestion control contention.
  • 2HTTP/2 multiplexes many requests as independent streams on a single TCP connection using binary framing. HPACK compresses headers, eliminating the redundant cookie and user-agent bytes sent with every HTTP/1.1 request.
  • 3HTTP/2 still suffers from transport-layer head-of-line blocking because all streams share one TCP connection. A single lost TCP segment stalls all streams until retransmission completes.
  • 4HTTP/3 runs on QUIC (over UDP) with per-stream loss recovery, eliminating transport-layer head-of-line blocking. Each HTTP/3 stream is independent at the transport level.
  • 5QUIC's 0-RTT connection resumption allows HTTP/3 to send data on the first packet for previously connected servers, saving 1-2 RTTs compared to TCP+TLS handshakes. This significantly improves performance for mobile users with high-latency cellular connections.
  • 6HTTP/2 reduces page load time by 15-50% over HTTP/1.1. HTTP/3 reduces connection latency by 1 RTT and is most beneficial on lossy networks where TCP retransmissions cause cascading delays across all multiplexed streams.
Simple Example

The Highway Lanes Analogy

HTTP/1.1 is like a single-lane road where cars (requests) must follow each other -- if the car in front stops, everyone behind waits. Opening multiple TCP connections is like adding parallel single-lane roads, but each has its own traffic signal and toll booth overhead. HTTP/2 is like a multi-lane highway on a single road: cars can travel side by side (multiplexing), but if there is a pothole (packet loss) on the road surface itself, all lanes are affected because they share the same pavement. HTTP/3 is like giving each lane its own separate road surface: a pothole in lane 1 only affects lane 1, while lanes 2 and 3 continue unimpeded.

Real-World Examples

Google

Google pioneered the transition from HTTP/1.1 to HTTP/2 by developing SPDY (2009), which became the basis for the HTTP/2 standard. Google then developed QUIC (2012), which became HTTP/3. Google reported that QUIC reduced YouTube rebuffering by 18% and Search latency by 8%. Chrome was the first major browser to implement both HTTP/2 and HTTP/3, driving adoption across the web.

Cloudflare

Cloudflare was an early HTTP/3 adopter, enabling it across its entire network of 310+ data centers in 2019. By 2026, over 25% of traffic through Cloudflare uses HTTP/3. Cloudflare reports that HTTP/3 provides the greatest improvement for users on lossy mobile networks (3G/4G), where TCP retransmissions cause cascading head-of-line blocking across all HTTP/2 streams. Their infrastructure negotiates HTTP version via Alt-Svc headers, allowing graceful fallback.

Meta

Meta adopted HTTP/3 for mobile apps (Facebook, Instagram, WhatsApp) where cellular network conditions are highly variable. Mobile networks have higher packet loss rates (1-5%) and more frequent connection migrations (switching between WiFi and cellular). QUIC's connection migration (tied to connection IDs rather than IP:port tuples) allows seamless transitions without re-establishing connections, and per-stream loss recovery prevents a single dropped packet from stalling the entire app's data loading.

Trade-Offs
AspectDescription
Multiplexing Gains vs TCP HOL BlockingHTTP/2's multiplexing eliminates application-layer head-of-line blocking but is undermined by transport-layer blocking in TCP. On low-loss networks (wired connections), this barely matters. On lossy networks (mobile), TCP HOL blocking can negate HTTP/2's multiplexing benefits entirely, making HTTP/3 significantly better.
Connection Setup Latency vs ComplexityHTTP/3's 0-RTT connection resumption saves 1-2 RTTs compared to TCP+TLS, but QUIC is more complex to implement and debug. QUIC packets are fully encrypted (unlike TCP headers), making network-level debugging with tools like tcpdump harder. Middleboxes (firewalls, NATs) may drop or throttle UDP traffic.
Server Resource UsageHTTP/2's single-connection multiplexing reduces the number of TCP connections a server must manage (from 6-8 per client to 1), lowering memory and file descriptor usage. HTTP/3 over UDP requires the server to manage connection state in user space rather than the kernel TCP stack, which can increase CPU overhead for connection management.
Infrastructure CompatibilityHTTP/1.1 works everywhere -- every proxy, load balancer, and firewall understands it. HTTP/2 requires TLS in practice (all major browsers require HTTPS for H2). HTTP/3 requires UDP passthrough, which some enterprise firewalls and corporate networks block. Graceful fallback mechanisms (Alt-Svc headers) add deployment complexity.
Case Study

Cloudflare's HTTP/3 Rollout -- Improving Mobile Performance

Scenario

Cloudflare observed that HTTP/2 performance on mobile networks was often disappointing despite multiplexing. On cellular connections with 2-5% packet loss, a single lost TCP packet stalled all multiplexed HTTP/2 streams. Page load times for mobile users were 20-30% worse than expected from HTTP/2's theoretical improvements. With mobile traffic exceeding 60% of web traffic globally, this was a significant problem.

Solution

Cloudflare implemented HTTP/3 across its entire edge network, advertising HTTP/3 support via Alt-Svc headers. Their implementation used quiche, a Rust-based QUIC library, integrated into their edge servers. QUIC's per-stream loss recovery meant that a lost packet on one HTTP stream no longer blocked other streams. 0-RTT connection resumption eliminated the TCP+TLS handshake latency for returning visitors. Connection migration handled seamless transitions between WiFi and cellular without connection re-establishment.

Outcome

Mobile page load times improved by 10-15% for users on lossy networks. Connection setup latency decreased by 100-150ms (1 RTT savings) for returning visitors. By 2026, over 25% of Cloudflare's traffic uses HTTP/3. The rollout demonstrated that HTTP/3's benefits are most pronounced exactly where they are most needed: on the lossy, high-latency mobile connections that account for the majority of web traffic.

Common Mistakes
  • Assuming HTTP/2 is universally faster than HTTP/1.1. On very low-latency, low-loss connections with few concurrent requests, HTTP/1.1 with pipelining can match HTTP/2. HTTP/2's advantages scale with the number of concurrent requests and the latency of the connection.
  • Ignoring transport-layer head-of-line blocking in HTTP/2. Many developers assume multiplexing solves all performance issues, but TCP HOL blocking can be severe on lossy networks. This is the fundamental motivation for HTTP/3.
  • Blocking UDP at the firewall and wondering why HTTP/3 does not work. HTTP/3 requires UDP passthrough. Corporate firewalls, some ISPs, and poorly configured cloud security groups may block UDP, forcing fallback to HTTP/2 over TCP.
  • Relying on HTTP/2 server push without measurement. Server push was intended to proactively send resources, but in practice it often pushes resources the client already has cached, wasting bandwidth. Chrome removed server push support in 2022 in favor of 103 Early Hints.
Related Concepts

See HTTP/1.1 vs HTTP/2 vs HTTP/3 in action

Explore system design templates that use http/1.1 vs http/2 vs http/3 and run traffic simulations to see how these concepts perform under real load.

Browse Templates

Benchmark HTTP/1.1 vs HTTP/2 multiplexing on URL shortener

Metrics to watch
p99_latency_msthroughput_rpsconnection_counttime_to_first_byte_ms
Run Simulation
Test Your Understanding

1What is the primary problem that HTTP/2 multiplexing solves compared to HTTP/1.1?

2Why does HTTP/3 use QUIC over UDP instead of TCP?

3What does HTTP/3's 0-RTT connection resumption achieve?

Deeper Reading