Charts · 25
Why they are still seeing the old version
You shipped the fix, you can see it, they cannot, and a hard reload fixes it for you and not for them. Nothing is broken: their browser has a stored response it believes is still fresh, so it never asked. Here are five sets of headers run against the same six visits, with the deploy in the middle, so you can see exactly which visit finds out and which one does not.
Cache-Control: max-age=3600ETag: "a3f1c9"URL: /index.htmlHTML with max-age=3600. You deploy the fix and nobody sees it for an hour. This is the single most common caching bug in production.
| Visit | What the browser does | Status | Transferred | Time |
|---|---|---|---|---|
| First visit | Nothing stored yet, so a full request. | 200 | 84 KB | 245 ms |
| Clicks through, 30 s later | Still fresh: 30 s old against max-age=3600. No request leaves the machine, so a change on the server is invisible until it expires. | 200 (memory cache) | 0 | 0 ms |
| Comes back half an hour later | Still fresh: 1800 s old against max-age=3600. No request leaves the machine, so a change on the server is invisible until it expires. | 200 (disk cache) | 0 | 3 ms |
| You deploy the fix, they reloadthe fix is live on the server | Still fresh: 1900 s old against max-age=3600. No request leaves the machine, so a change on the server is invisible until it expires.They still see the old version. | 200 (disk cache) | 0 | 3 ms |
| They hard-reload (Cmd+Shift+R) | A hard reload sends no-cache upstream and ignores every stored response, which is why it always fixes it for you and never for them.They see the fix. | 200 | 84 KB | 245 ms |
| An hour after their first load | Still fresh: 1799 s old against max-age=3600. No request leaves the machine, so a change on the server is invisible until it expires.They see the fix. | 200 (disk cache) | 0 | 3 ms |
Times assume one 4G round trip of 170 ms and 75 ms to send 84 KB, the same model as chart 11. What matters is the shape: a fresh hit costs nothing and can be wrong, a 304 costs one round trip and is always right, a full response costs both.