The HTTP request lifecycle is everything that happens between a client calling fetch and the response body landing in its hands: DNS resolution, the TCP and TLS handshakes, the request on the wire, the server's middleware and handler, and the response coming back over a connection that usually stays open for the next call.
HTTP is a text-based request and response protocol layered on top of a reliable byte stream. A request is a method, a path, a version, a set of headers, and an optional body. A response is a status line, headers, and an optional body. Nothing about HTTP itself says how those bytes reach the other machine, which is why a single fetch call involves several lower layers before any HTTP text is exchanged.
Before the first byte of HTTP can be sent the client needs an IP address (DNS), a connection (the TCP three-way handshake), and for https an encrypted channel with a verified peer (the TLS handshake). Each of these costs at least one network round trip, so on a 30 ms link a cold request spends roughly 20 ms on DNS, 30 ms on TCP, and 30 ms on TLS 1.3 before the request line even leaves the machine. Warm connections skip all three, which is why keep-alive and connection pooling matter so much.
On the server the request is parsed into an object and passed through an ordered chain of functions. In Express-style frameworks these are middleware: each one can read or modify the request, end the response, or call next() to pass control on. The router is one of those functions; it matches the method and path pattern, fills route params, and invokes the handler. Handlers are usually async because they wait on a database or another service, and that await suspends only that one request while the event loop keeps serving others.
The response carries a status code that classifies the outcome (2xx success, 3xx redirect, 4xx client error, 5xx server error) and headers that tell the client how to treat the body: its type, its length, whether it may be cached, and whether the connection can be reused. The client's promise resolves as soon as the headers are in; reading the body is a second asynchronous step because the body may still be streaming.
Interview framing: define HTTP Request Lifecycle in one sentence, then explain one concrete runtime behavior and one common pitfall with a short code example.