HTTP 304 Not Modified
The cache validator: nothing changed since your last visit, keep using the copy you already have.
What HTTP 304 means
HTTP 304 Not Modified is the answer to a conditional request. The client says “I have a copy from this date” (If-Modified-Since) or “with this fingerprint” (If-None-Match), and the server confirms the copy is still current by replying 304 with no body.
This mechanism — cache revalidation — is what makes repeated page loads fast: the browser re-downloads only what changed, and everything else costs a single small round trip.
Common causes of 304 responses
- The browser revalidated a cached page, script or image and it had not changed.
- A CDN edge revalidated its stored object against the origin.
- An API client used ETags to poll a resource cheaply.
Good practices for developers
- Serve stable ETag or Last-Modified headers so clients can revalidate at all.
- Do not include a response body with 304 — the client explicitly has it already.
- Beware of ETags that change on every response (e.g. from load-balanced servers with per-node hashes): they silently disable revalidation.
Example response
GET /styles.css HTTP/1.1 If-None-Match: "abc123" HTTP/1.1 304 Not Modified ETag: "abc123" Cache-Control: max-age=3600
SEO impact
304 responses are good for SEO performance: Googlebot uses conditional requests heavily, and correct revalidation lets it crawl more of your site for the same budget. Broken validators force full re-downloads on every crawl.
FAQ
Is a 304 response an error?
No — it is a success signal meaning your cached copy is still valid. Browsers handle it transparently.
What triggers a 304 response?
A request carrying If-None-Match or If-Modified-Since headers whose values still match the current resource.
Why do I see 304 in DevTools instead of 200?
The browser had a cached copy and revalidated it. The status shows the server confirmed the cache instead of resending the file.