You changed a file, reloaded, and the browser still shows yesterday's page. Here are the shortcuts, then what to do when they aren't enough.
| System | Hard refresh |
|---|---|
| Windows and Linux | Ctrl+Shift+R or Shift+F5 |
| macOS | Cmd+Shift+R |
This reloads the page and asks the server for its files again instead of reusing cached copies. It does not clear cookies, localStorage, IndexedDB or a service worker's caches.
Open DevTools (F12), then right-click the reload button and choose Empty cache and hard reload. It appears only while DevTools is open.
DevTools → Network → tick Disable cache. It applies while DevTools stays open, which is the setting most developers want all day.
DevTools → Application → Service Workers. Tick Update on reload, or press Unregister and reload. This is the usual reason a hard refresh "doesn't work" on a modern app.
Your browser isn't the only cache. Check the response headers for Cache-Control, Age and any CDN header. Fix it at the source with sensible headers:
Cache-Control: no-store # never cache (HTML you always want fresh)
Cache-Control: max-age=31536000, immutable # hashed asset files
Instead of reaching for the shortcut every time, you can send Cache-Control: no-cache with your requests to a chosen site, so you keep getting fresh answers while you work.
A one-click preset sets Cache-Control: no-cache for the sites you pick, and you can switch it off when you're done. It also removes CSP or X-Frame-Options, unblocks CORS, and shows whether each rule actually fired. Free, no analytics.
Age response header.More on this topic: What is a HAR file, how to open one, and what it exposes · JWT decoder and generator · JWT errors: jwt malformed, invalid signature, jwt expired and more · UUID generator