NetFlow Lab/Protocol Labs/HTTP
Simulated
Mission

Fetch example.com/index.html and count how many requests one page really takes.

http request / response · over one TCP connection0 bytes of HTTP
BrowserPC-1 · 192.168.1.10Web server203.0.113.20 : 80tcp connectionThe socket is open. HTTP has not said anything yet.
raw bytes on the wire · plain text, human readable—
connection open, nothing asked yet — press send below
http_message · a start line, some headers, then a body
method
GET

read, change nothing

path
/index.html

the resource wanted

host
example.com

required — one IP, many sites

status
—

found it, here it is

content-type
—

how to parse the body

content-length
—

where the body ends

etag
—

used on the next visit

connection
—

socket stays open for more

exchange_state
Visit
idle · socket open
1TCP connection already open
2GET /index.html — the request
3Server resolves path to a resource
4200 OK + headers
5Body streams — 13,412 bytes
63 more requests — same connection
Think first · step 1 of 6

HTTP can’t move bytes on its own. What has to exist before the browser can send anything?

what just happened

A GET request is a few lines of plain text. Step through and watch one request turn into one response — and then watch how one page turns out to need four of them.

socket 49512 → 203.0.113.20:80 ESTABLISHED 0 bytes exchanged
the common mistake

One page is not one request. The HTML arrives first, and only then does the browser discover the CSS, the script and the image it needs — each one is its own request over the same connection.

HTTP is stateless: the server remembers nothing between requests. Every request has to carry its own context — that is why Host, cookies and auth headers are repeated every single time.

HTTP does no delivery work of its own. It rides a TCP connection that was already built by a three-way handshake, to an address found by DNS.