In a nutshell
HTTP caching lets the browser skip downloads it doesn't need. The first request misses the cache and the server returns 200 with the file, a Cache-Control: max-age (how long the copy stays fresh) and an ETag (a fingerprint of the content). While fresh, repeat requests are served straight from the cache with zero network. Once stale, the browser revalidates with If-None-Match: <etag>; if nothing changed the server replies 304 Not Modified with no body, so the cached copy is reused and only a few header bytes cross the wire instead of the whole file.