In an extremely rough and simplified sketch, assuming the simplest possible HTTP request, no proxies and IPv4 (this would work similarly for IPv6-only client, but I have yet to see such workstation):
-
browser checks cache; if requested object is in cache and is fresh, skip to #9
-
browser asks OS for server's IP address
-
OS makes a DNS lookup and replies the IP address to the browser
-
browser opens a TCP connection to server (this step is much more
complex with HTTPS)
-
browser sends the HTTP request through TCP connection
-
browser receives HTTP response and may close the TCP connection, or
reuse it for another request
-
browser checks if the response is a redirect (3xx result status codes),
authorization request (401), error (4xx and 5xx), etc.; these are handled
differently from normal responses (2xx)
-
if cacheable, response is stored in cache
-
browser decodes response (e.g. if it's gzipped)
-
browser determines what to do with response (e.g. is it a HTML page, is it
an image, is it a sound clip?)
-
browser renders response, or offers a download dialog for unrecognized
types
Again, discussion of each of these points have filled countless pages; take this as a starting point. Also, there are many other things happening in parallel to
this (processing typed-in address, adding page to browser history, displaying progress to user, notifying plugins and extensions, rendering the page while it's downloading, pipelining, connection tracking for keep-alive, etc.).