What is HTTP/3? -  protocol explained

What is HTTP/3? - protocol explained

Recently, Pinterest move to HTTP 3.

HTTP/3 is based on QUIC (Quick UDP Internet Connections), and thus UDP, rather than transmission control protocol (TCP), and TCP’s limitations are what caused my streaming video problems.

  1. Both HTTP/1.1 and HTTP/2 over TCP have Head-of-Line blocking issues, where “one lost packet in the stream makes all streams wait until that package is re-transmitted and received.”

  2. TCP connections have redundant steps when a client reconnects with a known server when using transport layer security (TLS) (though this can be avoided by using TLS 1.3, which QUIC adopts).

The use of QUIC means that HTTP/3 relies on the User Datagram Protocol (UDP), not the Transmission Control Protocol (TCP). Switching to UDP will enable faster connections and a faster user experience when browsing online.

HTTP/3 is the upcoming third major version of the Hypertext Transfer Protocol (HTTP) used to communicate between web servers and clients. It is the successor to HTTP/2 and HTTP/1.1, which are the current versions in use.

The primary goal of HTTP/3 is to improve the performance of HTTP communication by reducing latency and increasing security. It does this by replacing the existing TCP protocol used in HTTP/2 with the new QUIC protocol. QUIC is a transport layer protocol that uses User Datagram Protocol (UDP) instead of TCP, which helps to reduce the overhead caused by TCP's slow-start mechanism.

HTTP/3 also includes features like improved header compression, server push, and early data, which can further improve the performance of web communication.

Additionally, HTTP/3 uses TLS 1.3 as the default security protocol, which provides better security and privacy than previous versions of TLS.

One of the benefits of HTTP/3 is that it can improve web performance, especially on mobile devices and in environments with poor network conditions. HTTP/3's use of UDP protocol helps to reduce the number of round trips required to establish a connection, which improves the overall latency.

However, it's worth noting that HTTP/3 is still a relatively new protocol, and not all web servers and clients support it yet. As with any new technology, there may be bugs and compatibility issues that need to be addressed before it becomes widely adopted.

In summary, HTTP/3 is the upcoming third major version of the Hypertext Transfer Protocol (HTTP), designed to improve web performance and security by using the QUIC protocol and TLS 1.3. While it has the potential to offer significant benefits, its adoption is still in progress, and it may take some time before it becomes the standard protocol for web communication.

How Do to Get Started with HTTP/3?

Where Is HTTP/3 Supported?

HTTP/3 is supported by two of the three major browsers, the most recognized mobile app languages, and some server-side languages, as well as the largest content-delivery networks. But there are caveats.

Protocol Stack of HTTP/3 compared to HTTP/1.1 and HTTP/2

Protocol stack of http/3

Libraries Open-source libraries that implement client or server logic for QUIC and HTTP/3 include. You can use one of these libraries to create an http3 server and client.

Name

Client

Server

Programming language

Company

Repository

lsquic

Yes

Yes

C

LiteSpeed

https://github.com/litespeedtech/lsquic

nghttp3

Yes

Yes

C

https://github.com/ngtcp2/nghttp3

h2o

No

Yes

C

https://github.com/h2o/h2o

libcurl[30][31]

Yes

No

C

https://github.com/curl/curl

MsQuic[32]

Yes

Yes

C

Microsoft

https://github.com/microsoft/msquic

proxygen

Yes

Yes

C++

Facebook

https://github.com/facebook/proxygen#quic-and-http3

Cronet

Yes

Yes

C++

Google

https://github.com/chromium/chromium/tree/main/net/quic

.NET[33]

Yes

Yes

C# (using MsQuic)[34]

Microsoft

https://github.com/dotnet

quic-go

Yes

Yes

Go

https://github.com/quic-go/quic-go

http3

Yes

Yes

Haskell

https://github.com/kazu-yamamoto/http3

Kwik

Yes

Yes

Java

https://github.com/ptrd/kwik

Flupke

Yes

Yes

Java

https://bitbucket.org/pjtr/flupke

aioquic

Yes

Yes

Python

https://github.com/aiortc/aioquic

quiche

Yes

Yes

Rust

Cloudflare

https://github.com/cloudflare/quiche

neqo

Yes

Yes

Rust

Mozilla

https://github.com/mozilla/neqo

quinn

Yes

Yes

Rust

https://github.com/quinn-rs/quinn

s2n-quic

Yes

Yes

Rust

Amazon Web Services

https://github.com/aws/s2n-quic

Did you find this article valuable?

Support Pratik Sharma by becoming a sponsor. Any amount is appreciated!