Developer Tools

HTTP 304 Not Modified

3xx Redirection. The resource hasn't changed since the version specified by request headers, so the client can use its cached copy.

Runs in your browser. Your files and text never leave your device - nothing is uploaded.

3xx Redirection

What it means

The resource hasn't changed since the version specified by request headers, so the client can use its cached copy.

PropertyDetail
Status class3xx Redirection
Defined inRFC 9110, Section 15.4.5
Cacheable by defaultNot stored as a response of its own. A cache uses it to refresh the copy it already holds (RFC 9111, Section 4.3.4).
Who needs to actNo one. It is caching working as designed.

What does HTTP 304 Not Modified mean?

HTTP 304 Not Modified means the client's cached copy is still current, so the server sends no body. It answers a conditional GET or HEAD that carried If-None-Match with an ETag, or If-Modified-Since with a date. The client then reuses its stored copy, saving bandwidth while still confirming freshness.

How 304 Not Modified works

A 304 is the cheap half of revalidation. When a cached response goes stale, the browser asks again with a validator: If-None-Match carrying the ETag it saved, or If-Modified-Since carrying the Last-Modified date. If nothing changed, the server replies 304 with headers only. RFC 9110 requires the 304 to include whichever of Cache-Control, Content-Location, Date, ETag, Expires and Vary a 200 would have carried, so the cache can update its stored metadata. Although it sits in the 3xx class, a 304 redirects the client to its own cache rather than to another URL.

Example 304 request and response

GET /assets/app.css HTTP/1.1
Host: example.com
If-None-Match: "33a64df5"

HTTP/1.1 304 Not Modified
ETag: "33a64df5"
Cache-Control: max-age=600

The ETag matched, so the stylesheet is not resent, and the new max-age gives the cached copy another ten minutes of freshness.

When servers send 304 Not Modified

  • A browser revalidating a stale stylesheet, image or page it already has.
  • A CDN revalidating its copy with the origin server.
  • API clients and crawlers that store ETags and send them back.

How to handle 304 Not Modified

If a change you deployed is not showing

  • A 304 means the server believes nothing changed. Check that your deploy actually updates the file's ETag or Last-Modified.
  • Use versioned or hashed file names for static assets, so each release has new URLs.

If you run the server

  • Generate reliable ETags or Last-Modified dates, and make sure every server behind a load balancer produces the same ETag for the same file.
  • Never send a body with a 304; RFC 9110 says the response ends after the headers.
  • Repeat Cache-Control and ETag on the 304 so caches update their stored metadata.

304 and SEO

Google's crawler documentation says a 304 tells its indexing pipeline that the content is the same as at the last crawl. Signals for the URL may be recalculated, but the status has no other effect on indexing. Supporting conditional requests therefore saves bandwidth for both your server and the crawler.

Related status codes

  • 200 OK: Sent with the full body when the validator no longer matches.
  • 412 Precondition Failed: A different kind of condition: an If-Match on an update failed, so the change was refused.
  • 206 Partial Content: Sends part of the resource rather than none of it.

Frequently asked questions

Sources

Other 3xx Redirection codes

Reviewed by Raja Jahangir · Last reviewed: October 7, 2026