--- title: "304 Not Modified — what it means and how to fix it" description: "Your cached copy is still current, so the server is not sending the file again. What causes an HTTP 304, what to try as a visitor, and what to check if it is your own site." url: https://atoneplace.net/error/304/ site: "At One Place" --- # HTTP 304 — Not Modified **HTTP 304: Not Modified** Your cached copy is still current, so the server is not sending the file again. ## What 304 actually means The client asked "has this changed since the version I already have?" using `If-None-Match` or `If-Modified-Since`, and the server checked and said no. The response has no body at all, which is the whole point: a 304 costs a few hundred bytes instead of re-downloading an image. A page full of 304s in the network panel is a well-cached page, not a broken one. ## Common causes - The client sent an `If-None-Match` header whose ETag matched the current one - The client sent `If-Modified-Since` and the resource has not changed - A CDN revalidated a stale cache entry against the origin ## If you're just trying to view the page 1. Nothing — this is caching working as designed and makes pages load faster 2. If you are seeing an outdated version of a page, force a reload with Ctrl+F5 (Windows) or ⌘ + Shift + R (Mac) to bypass the cache ## If it's your site 1. A 304 must not include a body; some frameworks accidentally send one and break clients 2. If updated assets are not reaching users, check whether your ETag is stable across servers — load-balanced fleets that generate ETags from inode numbers produce inconsistent results 3. Content-hashed filenames plus long `Cache-Control: immutable` avoid the revalidation round trip entirely ## Reference - **Status code:** 304 - **Reason phrase:** Not Modified - **Category:** 3xx — Redirection - **Defined in:** RFC 9110 §15.4.5 ## Common questions ### What does HTTP 304 mean? Your cached copy is still current, so the server is not sending the file again. The client asked "has this changed since the version I already have?" using `If-None-Match` or `If-Modified-Since`, and the server checked and said no. The response has no body at all, which is the whole point: a 304 costs a few hundred bytes instead of re-downloading an image. ### How do I fix a 304 error? Nothing — this is caching working as designed and makes pages load faster ### Is 304 a client error or a server error? 304 is in the 3xx range, which means redirection. It is not an error at all. ## Related pages - [301 Moved Permanently](https://atoneplace.net/error/301/) - [302 Found](https://atoneplace.net/error/302/) - [307 Temporary Redirect](https://atoneplace.net/error/307/) - [308 Permanent Redirect](https://atoneplace.net/error/308/) - [303 See Other](https://atoneplace.net/error/303/) - [300 Multiple Choices](https://atoneplace.net/error/300/) - [305 Use Proxy](https://atoneplace.net/error/305/) - [306 (Unused)](https://atoneplace.net/error/306/) ## Sources - Hypertext Transfer Protocol (HTTP) Status Code Registry — IANA (https://www.iana.org/assignments/http-status-codes/) - RFC 9110: HTTP Semantics — IETF (https://www.rfc-editor.org/rfc/rfc9110.html)