πŸ“Š Connection & Request Details

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

πŸ›‘οΈ RPKI Check

Is your ISP BGP safe? This check tests whether your ISP filters invalid BGP route announcements using RPKI by fetching resources from both validly and invalidly signed prefixes (powered by isbgpsafeyet.com).

$ fetch https://valid.rpki.isbgpsafeyet.com
... loading ...
$ fetch https://invalid.rpki.isbgpsafeyet.com/
... loading ...

✨ HTTP/3

HTTP/3 replaces TCP with QUIC, a multiplexed transport protocol built over UDP with TLS 1.3 integrated directly into the handshake. Because each stream is independent at the transport layer, a lost UDP packet only stalls the single stream it belongs toβ€”eliminating transport-layer head-of-line blocking.

Browsers typically discover HTTP/3 support in two ways:

  • Alternative Service (Alt-Svc) header: A server sends Alt-Svc: h3=":443" on an HTTP/1.1 or HTTP/2 response so subsequent connections upgrade to QUIC on UDP port 443.
  • HTTPS DNS record: A DNS record advertising alpn="h3" alongside the IP address, allowing the browser to speak HTTP/3 on the very first request.

πŸš€ HTTP/2

HTTP/2 replaced plain-text lines with a binary framing layer and introduced stream multiplexing, HPACK header compression, and flow control over a single TCP connection.

This solved HTTP-layer head-of-line blocking, though a single lost TCP packet still stalls all active streams at the OS kernel level until retransmitted.

πŸ“‘ HTTP/1.1

HTTP/1.1 made persistent connections (Keep-Alive) the default so browsers could reuse a single TCP connection across multiple requests, and added chunked transfer encoding for streaming responses of unknown length.

Because responses must still be returned strictly in order on each connection, a slow response holds up every queued request behind it (HTTP head-of-line blocking).

🐌 HTTP/1.0

HTTP/1.0 introduced the anatomy we recognize today: status codes (200 OK, 404 Not Found), request and response headers (Content-Type, Content-Length), and methods like POST and HEAD.

Without persistent connections by default, every single image or stylesheet required a fresh TCP three-way handshake.

πŸ“œ HTTP/0.9

The original 1991 one-line protocol: no headers, no status codes, and only a single method (GET /path). The server wrote back raw HTML bytes and immediately closed the TCP connection.