MMS • Sergio De Simone
HTTP/3 is the next protocol for network communication across the Web, which is meant to partially replace HTTP/1 and HTTP/2. One month before the next QUIC Working Group meeting, to be held in Zurich next February, it may be useful to recap what HTTP/3 promises and what its current client/server support looks like.
HTTP/3 promises to make Internet connections faster, more reliable, and more secure. Born as “HTTP over QUIC”, an effort to adapt the HTTP protocol to run on top of Google’s own transport layer protocol, QUIC, it was later proposed as an IETF standard and it is currently an Internet Draft. In October 2018, IETF HTTP & QUIC Working Groups Co-chair Mark Nottingham proposed to rename HTTP over QUIC as HTTP/3 to clarify its true nature and its independence from QUIC.
QUIC is a key element of HTTP/3, since it provides the foundations for its main features. Built on top of UDP, QUIC attempts to solve the major issues experienced when using the TCP protocol, i.e., connection-establishment latency and multi-stream handling in the presence of packet loss. TCP latency issue stems from the requirements of its congestion control algorithm, which mandates for a slow start to assess how much traffic can be sent before congestion occurs. This compounds, in HTTP/1.0, with the fact each TCP request/response exchange is assigned a new connection, thus incurring the slow-start penalty.
Ever since, the attempt to circumvent TCP slow-start, has been at the core of successive efforts to improve the HTTP protocol.
HTTP/1.1 introduced “keep-alive” connections to enable to sequentialize multiple request-response exchanges over the same TCP connection, thus not requiring a new connection establishment phase for each request. HTTP/1.1 keep-alive connections, though, do not support sending multiple requests out at the same time, which again resulted in a bottleneck due to the growing complexity of Web pages.
HTTP/2, based on the now deprecated SPDY protocol, introduced the concept of first-class streams embedded in the same connection. This enabled simultaneous request-response exchanges but with a major flaw: when packet loss increases, HTTP/2 performance degrades due to TCP way of dealing with packet retransmission, which ends up affecting equally, i.e., halting, all streams sharing the same connection. When packet loss surpasses a given threshold, paradoxically, HTTP/1 multiple connections happen to work more efficiently then HTTP/2.
As mentioned, QUIC has first-class streams, which solves the connection slow-start latency as it happens in HTTP/2. Additionally, it handles them separately from one another, which solves the performance issues due to packet loss. Adopting QUIC as its transport layer protocol is HTTP/3 biggest step away from HTTP/2. Since QUIC natively implements a number of features related to streams management that were integral parts of the HTTP/2 specification, those could be removed from HTTP/3. Additionally, the adoption of QUIC required to create a new HTTP header compression scheme, QPACK, since HTTP/2 HPACK header compression is heavily dependent on the order in which TCP delivers packets to the endpoints.
For several years, Google has been using QUIC for its own services, including search, YouTube, and others, and also supported it in Chrome. For a while, Chrome was the only way to use QUIC when communicating with Google services supporting it. Recently, Mozilla added support for HTTP/3 in Firefox 72, too, although still experimentally. The command-line tool curl also added support for HTTP/3 in version 7.66.0, along with many additional features. Server-side, HTTP/3 is supported by LightSpeed and Nginx.
On the Cloud front, besides Google, Cloudflare announced a few months ago to have preliminary enabled HTTP/3 for a part of their customers. Cloudflare is also the company behind Quiche, an open-source Rust library enabling the implementation of HTTP/3 clients and servers.
As mentioned, HTTP/3 is still being defined by IETF, with no official release date set yet. Meanwhile, adoption of HTTP/3 is growing worldwide, with almost 300,000 services using it across the world. Google is still the top organization to deploy HTTP/3, but several others take a non-insignificant share. InfoQ will continue to timely report about HTTP/3 to keep our audience up to date about the evolution of the Internet.