Handshake-RTT race

Each run opens a cold connection to a fresh subdomain over HTTP/3 (race-*.quic-demo, QUIC) and HTTP/2 (race-*.h2-only, TCP) at the same instant, and times the setup with the browser's Resource Timing API. HTTP/3 merges transport and crypto into ~1 round trip; HTTP/2 needs TCP then TLS (2–3). Each leg self-checks the protocol it actually used, and warm/reused connections are discarded.

h3: handshake    h2: TCP TLS