What is HTTP3Check?
HTTP3Check is a hosted QUIC protocol exploration tool used to check whether a server supports the QUIC transport protocol and the HTTP/3 semantics.
HTTP3Check can query given endpoints for support of both IETF QUIC (HTTP/3) and gQUIC protocols.
What happens when I search a web site?
When the form is submitted, the Flask app validates input parameters and resolves the hostname (if necessary) to get the IP address of a given host.
Following input validation, the app makes an HTTP GET request over TCP to look at the HTTP headers from the given endpoint.
The app scans the headers it receives in search of the "alt-svc" header.
If it is found, HTTP3Check uses it to learn if the server advertises QUIC support and which QUIC versions it supports.
Next, the app creates a subprocess that acts as a browser to create a request for the '/' path on the given host.
The twist here is that instead of using TCP/TLS to establish an encrypted transport channel,
the subprocess uses the lsquic HTTP/3 and QUIC library and the QUIC protocol to create a secure connection to the server.
If the server can recognize the QUIC protocol, the server and subprocess will attempt to establish an encrypted connection, and exchange HTTP requests and responses.
If the "alt-svc" header from the previous step did not specify any QUIC versions, the subprocess will ask the server for a list of its supported versions and undergo version negotiation.
After a successful QUIC connection, the subprocess will open an additional connection to test if the server supports zero round trip time resumption (0-RTT).
Following a failed connection or two successful connections, the subprocess will exit and the Flask app will render the results for the user.
What is lsquic library?
lsquic is an open source library for the HTTP/3 and QUIC protocols.
It is a useful tool for checking and testing servers with the QUIC protocol. It is maintained by LiteSpeedTech (us).
Learn more about lsquic.
What QUIC versions can we validate?
HTTP3Check can query given endpoints for support of Draft-23 of IETF QUIC (HTTP/3) and all active gQUIC protocols (Q039, Q043, and Q046).
What is HTTP/3?
HTTP/3 is a new mapping for HTTP that is specifically designed to be transported using the QUIC protocol.
It is similar to the previous iteration, HTTP/2, but with changes to semantics and syntax.
Learn more about HTTP/3 at quicwg.org.
What is QUIC?
QUIC is a new Internet transport protocol. It is designed to advance HTTP with optimizations set to increase performance and improvements in security.
There are two types of QUIC: gQUIC and IETF QUIC. The former began as an in-house project at Google and was later released for general consumption.
A handful of browsers, Chrome, Brave, and Opera, support the gQUIC protocol by default.
IETF QUIC is the standard for the transport protocol; it was engineered by the IETF QUIC Working Group.
Widespread support for the IETF QUIC protocol is growing. LiteSpeedTech (us) announced in November 2018 that it has a completed and functional IETF QUIC server.
Learn more about QUIC at quicwg.org.
Learn more about LiteSpeedTech's IETF QUIC announcement.
Output Metrics and Information
Zero Round Trip Time Resumption (0-RTT)
The QUIC handshake for this connection was completed without any additional round-trips.
These are the QUIC versions supported by this QUIC endpoint.
This unique identifier for a QUIC connection is used to ensure that changes to an endpoint's lower network layer address (UDP/IP) does not affect the delivery of the QUIC connection's packets.
This tool attempts two connections to test the server's 0-RTT capabilities.
During the first connection, the client receives important handshake material from the server.
With 0-RTT, the client can start to send data immediately if it uses this handshake material when it creates the second connection.
This value represents the time between the first packet sent and the first packet received (measured in milliseconds).
This value represents the time between when the first packet is sent and when the handshake is completed (measured in milliseconds).
Take notice of the difference in this metric between the first connection and the second connection.
Using 0-RTT, future connections (i.e. the second connection) can complete the handshake much faster than the original connection.
QLog is a standard under development for QUIC Connection debugging and visualization.
Learn more at https://quic.edm.uhasselt.be/
To view or download the raw QLog ("application/json"), add "format=qlog" to the HTTP query string.
Questions and Feedback
Join our GoLiteSpeed Slack and share your thoughts with this invitation.
Navigate to the #http3check channel and engage with us!