// http 3xx · redirection
HTTP 304 Not Modified
The cached copy is still valid; no body is sent.
What HTTP 304 Not Modified means
304 Not Modified is a caching response: the client's cached copy is still valid, so the server sends no body. It follows a conditional request (`If-None-Match` or `If-Modified-Since`) and saves bandwidth by letting the browser reuse what it already has.
Which category is it?
304 is a 3xx code — Redirection. 3xx means further action is needed to complete the request, usually because the resource lives at a different URL.
Example 304 response
GET /logo.png HTTP/1.1
If-None-Match: "33a64df5"
HTTP/1.1 304 Not Modified
ETag: "33a64df5"
Cache-Control: max-age=3600How to check a 304
- Look for the validator headers: the request sends If-None-Match (with an ETag) or If-Modified-Since, and the server compares them with the current version.
- Confirm the response has no body. A 304 must not include one, and it should repeat headers like ETag and Cache-Control.
- In browser dev tools, 304 rows in the Network tab are normal: the browser revalidated and reused its cached copy.
- If you expected fresh content, check that the ETag or Last-Modified value actually changes when the file changes.
304 compared with similar codes
- 200: 200 sends the full resource every time. 304 lets the browser reuse its cached copy after a cheap validation round trip.
- cache hit: A fresh cache hit (Cache-Control: max-age still valid) makes no request at all. A 304 is a request that confirms the cached copy is still good.
304 Not Modified: common questions
Is a 304 an error?
No. It is a normal, efficient caching response that saves bandwidth.
Why is my page not updating even though I changed it?
The server may be returning 304 because its ETag or Last-Modified did not change, or because it is not generated per file version. Fix the validators or fingerprint your asset URLs.