// 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=3600

How to check a 304

  1. 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.
  2. Confirm the response has no body. A 304 must not include one, and it should repeat headers like ETag and Cache-Control.
  3. In browser dev tools, 304 rows in the Network tab are normal: the browser revalidated and reused its cached copy.
  4. 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.

Other redirection (3xx) codes