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.