Here are the simplest steps followed :
- 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.).