Full path of a browser HTTPS request to a server: DNS resolution, TCP+TLS handshake, CDN edge cache lookup, WAF and load balancer, application server, Redis cache-aside and PostgreSQL, then the response travelling back to the browser.
What actually happens between pressing Enter and seeing pixels. The diagram walks one HTTPS GET through five tiers — name resolution, edge, application, data — and back. The pattern on display is layered request handling with cache-aside reads: every tier either answers from its own cache or forwards the request one hop deeper, and the response returns along exactly the same physical connections.
| Node | Role | Speaks |
|---|---|---|
browser | Initiates the request, holds the TCP/TLS connection | HTTP/2 over TLS 1.3 |
resolver | Recursive DNS resolver (ISP or 1.1.1.1), caches by TTL | DNS over UDP/53 |
authoritative-dns | Zone owner, source of truth for the A record | DNS |
cdn-edge | Nearest PoP, terminates TLS, serves static assets from cache | HTTP/2 |
waf | Inspects requests for injection and bot signatures | HTTP |
lb | Spreads traffic over healthy backends, least-connections | HTTP |
app-server | Routes, renders, orchestrates the data reads | HTTP |
redis | Cache-aside store, 60s TTL on rendered pages | RESP |
postgres | Source of truth for page data | SQL |
Cold request for a personalised page — the expensive path, every cache misses:
[URL] → [DNS] → [DNS-OK] — resolver misses, asks the authoritative NS, caches the A record for its TTL. Skipped entirely on the next request.[TCP] + [TLS] — two round trips to the PoP before a single byte of HTTP moves. This is why edge proximity dominates first-byte latency.[MISS] at cdn-edge — the route carries a session cookie, so the edge refuses to serve or store it and forwards inward.[FILTER] → [ROUTE] → [HANDLE] — WAF passes it, the LB picks a backend, the app server needs page data.[MISS] → [QUERY] → [FILL] — cache-aside: Redis is cold, Postgres answers, the app writes the result back with SETEX … 60.[RESPONSE] … [PAINT] — the response walks back up the same edges. Subgraph assets (CSS, JS) do hit the edge cache, which is why the second page view feels instant.A warm request short-circuits at step 3 or step 5 and never reaches Postgres.