Given all these moving parts it’s astounding that this works as reliably as it does. Each of the TCP, ARP and DNS requests also happen at each level of the stack. […] If there is a god, they are surely the one holding all these potentially unreliable systems together to make everything appear like it is working.
Hah! If you feel this way, it may be time to take a break and study some cell biology. Our Rube Goldberg info tech is weak sauce compared to the real magic.
Nice article! I just have a few minor suggestions that might avoid confusion for those learning from it:
The browser selects the memory region normally reserved for the address bar.
Just to note that “memory region” has a specific meaning that doesn’t apply here (ie. the equivalent of Linux’s vm_area_struct). Maybe “virtual memory address” would suit? Also, modern browsers don’t usually have a single address dedicated to the contents of the address bar (which seemed to be implied by “the memory […]”), because it’s not MT-Safe, which is fairly important nowadays with a separate main thread, UI thread, background task threads, etc.
I also wonder if it might be worth mentioning SNI, since otherwise there appears to be a gap in the information in your TLS section (eg. “how can an abstract load balancer know which certificate to present before decryption?”). :-)
I used to use this topic as point of discussion during interviews but after finding this page I stopped. That said, by the time you’re 5-10 years into your career I expect you’ve implemented (or could easily implement) an HTTP server from the socket layer. And if you’re in web development for that long, you probably should have some good understanding of networking and graphics on the browser side.
Slight tangent, High Performance Browser Networking is one of the few books I’d recommend to any developer remotely connected to browsers.
Hah! If you feel this way, it may be time to take a break and study some cell biology. Our Rube Goldberg info tech is weak sauce compared to the real magic.
Paul Morrison might agree and disagree given he builds complex systems in a similar way.
Nice article! I just have a few minor suggestions that might avoid confusion for those learning from it:
Just to note that “memory region” has a specific meaning that doesn’t apply here (ie. the equivalent of Linux’s
vm_area_struct
). Maybe “virtual memory address” would suit? Also, modern browsers don’t usually have a single address dedicated to the contents of the address bar (which seemed to be implied by “the memory […]”), because it’s not MT-Safe, which is fairly important nowadays with a separate main thread, UI thread, background task threads, etc.I also wonder if it might be worth mentioning SNI, since otherwise there appears to be a gap in the information in your TLS section (eg. “how can an abstract load balancer know which certificate to present before decryption?”). :-)
I used to use this topic as point of discussion during interviews but after finding this page I stopped. That said, by the time you’re 5-10 years into your career I expect you’ve implemented (or could easily implement) an HTTP server from the socket layer. And if you’re in web development for that long, you probably should have some good understanding of networking and graphics on the browser side.
Slight tangent, High Performance Browser Networking is one of the few books I’d recommend to any developer remotely connected to browsers.
If you want to make an HTTP Request from scratch, you must first invent the universe.
Just feel lucky that I didn’t go into how nerves and muscles work :D