This page is served for the hostname linnea.amberbio.com
from its own document root, /home/linnea/www/linnea.
Served by the Linnea server — an HTTP/TLS server written in x86-64 assembly — with SNI selecting this vhost's certificate.
Both endpoints live under /api, which this server routes to a
small HTTP/1.1 backend on loopback. Your browser reaches them over whichever
protocol it negotiated — including HTTP/3, where the request is carried on its
own QUIC stream and an upload is consumed as it arrives rather than held whole.
GET /api/random
POST /api/upload — the file is the request
body. The server hashes it as it lands and deletes it immediately; only the
name, size and digest come back.
This one is not a request and a response. The /ws location is
relayed to a backend as an opaque tunnel — this server forwards the upgrade,
then stops reading and never sees a frame. Everything RFC 6455 happens at
the far end, in assembly: the handshake token, the framing, the unmasking.
What the tunnel buys is the direction of travel. Pressing the button sends three bytes up the socket; the new value comes back down every open socket, including ones that asked for nothing. Open this page in a second tab and watch both numbers move together.
The socket is a separate HTTP/1.1 connection, so it runs alongside the HTTP/2 or HTTP/3 carrying the rest of the page rather than over it.
wss://linnea.amberbio.com/ws
connecting…
Scrubbing the timeline makes the browser ask for byte ranges instead of the
whole file: each seek is a Range request answered with
206 Partial Content. The file is about 30 MB, and nothing
like all of it is sent unless you watch to the end.
Below are ten ~0.6 MB images (~6 MB in all), requested at once when the page loads. Over HTTP/3 they stream concurrently — each as a sequence of STREAM-frame chunks in its own QUIC packet under the 1200-byte datagram floor — interleaved over one shared, growing congestion window and acknowledged and flow-controlled as they go.









