Understanding Git Filter-Branch and the Git Storage Model
manishearth.github.io
manishearth.github.io
Four other examples really come to mind that I've encountered: - Void pointers and structs in C (what actually are objects?) - "Curiously recurring template pattern" in C++ (how does template metaprogramming work?) - Ruby's declarative syntax in class definitions (ex: rail's `has_many`) (what are ruby classes?) - Monkey-patching instances of Ruby objects (what are Ruby objects?)
It's a similar feeling to those moments when you realize almost everything you've ever interacted with is artificial: other people made the decisions that made that thing this way...
...and different decisions are possible.
There is also the phenomenon that the lower level are often more stable and universal than the higher levels. Your languages and APIs might make all kinds of arbitrary decisions, but they must still somehow tackle the same basic issues of resource management, synchronisation -- concerns which bubble up through all the layers.
Understanding some properties of HTTP is a part of the abstraction layer of HTML. It's not a perfect abstraction completely shielding you from HTTP.
None of this is to argue that that a deep understanding of HTTP/TCP doesn't help write better HTML/JS, but they are separate things that can be considered separately.
Full use of xhr needs some (but not complete) understanding of http and TCP because the abstraction isn't a perfect one, nor is it supposed to be.
However, full understanding of HTTP/TCP can be very helpful, even if not necessary.