What version of HTTP are you connecting with?
You have downloaded this page using HTTP/1.0
You have downloaded this page with HTTP/1.1
You have downloaded this page with HTTP/2
Note that if you refresh this page there's a chance that you will connect with HTTP/3 instead. This is caused by the Alt-Svc header or the HTTPS DNS Entry being read by your browser after the first request to the page is already in progress or completed.
You have downloaded this page with HTTP/3
Congratulations! You are using the latest HTTP version.
You have downloaded this page with ???
This is awkward. You appear to be using a version of HTTP that this page doesn't know about! It could be that the HTTP version detection is broken, a new version was released and I just haven't updated this page yet, or you messed with the query parameter that I use to test this page. Regardless, congrats for finding this!
More Info
By the way, here is more information that is revealed about you from the request your browser made:
HTTP Version | |
---|---|
IP Address | |
ASN (?) | |
City | |
Postal Code | |
Country | |
Continent | |
Geo Coordinates | |
Time Zone | |
User Agent |
Below you will find descriptions of each version with a list of significant features added. I also wrote a post about this page. Feel free to read it here.
You can get this same information with the command line like so:
curl --http1.0 https://kmcd.dev/http/ -Is | grep x-kmcd
Here’s an example using curl’s HTTP/3 support (requires a specific build of curl)
$ curl --http3 https://kmcd.dev/http/ -Is | grep x-kmcd-http-request-version
x-kmcd-http-request-version: HTTP/3
HTTP/1.0
HTTP/1.0 Introduced status codes, headers for content negotiation, and support for various media types.
Each request/response required a new TCP connection, leading to overhead and performance issues.
HTTP/1.1
HTTP/1.1 introduced persistent connections (keeping a TCP connection open for multiple requests/responses), chunked transfer encoding, virtual hosting, and caching mechanisms.
HTTP/1.1 has limited support for concurrency and requires opening multiple connections to perform requests in parallel. It is also still text-based so the overhead for requests is rather large. Headers also cannot be compressed.
HTTP/2
HTTP/2 introduced binary framing, header compression (HPACK), multiplexing (multiple requests/responses concurrently over a single connection), and server push.
HTTP/2 still relies on TCP, which can suffer from head-of-line blocking and performance issues on lossy networks.
HTTP/3
HTTP/3 uses QUIC as its transport protocol which is built on UDP, providing faster connection establishment, improved congestion control, and multiplexed streams that are independently reliable.
HTTP/3 is relatively new, so adoption is still growing. However, all major browsers support HTTP/3 so for the web, adoption is mostly held up with server support.