Toolman

HTTP 304 — Not Modified

3xx Redirection

What it means

The cached copy the client already has is still current, so no body is sent.

What to do about it

Nothing to fix — this is caching working correctly. If you never see 304s, check that you are sending ETag or Last-Modified.

Where it sits

304 belongs to the 3xx family: Further action is needed to complete the request — usually following a redirect.

HTTP/1.1 304 Not Modified

Checking it yourself

# see the status code and headers only
curl -sI https://example.com/path

# follow redirects and print each hop
curl -sIL -o /dev/null -w "%{http_code} %{url_effective}\n" https://example.com/path

# JavaScript
const r = await fetch(url);
console.log(r.status, r.statusText);

How this code behaves

Cacheable by defaultNo — caches must not store this response unless explicit cache headers permit it.
Safe to retryNot applicable.
Effect on search indexingNo direct effect.

Returning 304 correctly

# nginx
return 304;

# Express
res.status(304).end();

# Go
w.WriteHeader(304)

# Python (Flask)
return '', 304;

Frequently asked questions

What does HTTP 304 mean?

The cached copy the client already has is still current, so no body is sent.

How do I fix a 304 error?

Nothing to fix — this is caching working correctly. If you never see 304s, check that you are sending ETag or Last-Modified.

Is 304 a client or server problem?

Neither — it is an instruction to look somewhere else, and clients normally follow it automatically.

Other 3xx codes

All HTTP status codes