HTTP status · 3xx — redirection
304 Not Modified
304 Not Modified tells a client that its cached copy is still fresh, so no body needs to be transferred.
Key facts
| Class | 3xx — redirection |
|---|---|
| Standard | RFC 9110 §15.4.5 |
| Requires | If-None-Match or If-Modified-Since |
| Body | None |
| Effect | Client reuses its stored response |
What 304 means
The client sent a conditional request with a validator it already has, such as If-None-Match: "abc123". The server found the cached copy is still valid and answers 304 with no body. The client then reuses its stored representation, which saves bandwidth and speeds up repeat visits.
Why you might not see 304
If the response has no ETag or Last-Modified, the client has nothing to validate with. If a proxy strips validators or a server generates a new ETag on every request, every response is a full 200. Dynamic pages that inject a timestamp into the ETag are a common cause; the validator must change only when the content changes.
Frequently asked questions
Does 304 mean the page was not found?
No. It is a cache validation result: the resource exists and the client's copy is current.
Can a 304 have a body?
No. A 304 terminates with headers only; the client uses the body it already stored.
What headers create a 304?
The client sends If-None-Match with an ETag or If-Modified-Since with a date. The server compares the validator and returns 304 when the cached copy is still valid.