HTTPfy

304 Not Modified

Not modified: the client's cached copy is still valid, so no body is sent.

304 at a glance

Code
304
Name
Not Modified
Class
3xx Redirection
Status
IANA-registered standard code
Defined in
RFC 9110, Section 15.4.5
Cacheable by default
It updates a stored response rather than being stored itself: caches refresh the cached 200 with its headers.

What 304 means

304 Not Modified answers a conditional GET or HEAD. The client sent If-None-Match (ETag) or If-Modified-Since, the resource has not changed, and the server tells the client to reuse its cached copy. The response has no body, which saves bandwidth, but it still costs a round trip; long max-age avoids even that.

What typically causes a 304

  • Browsers revalidating cached CSS, JS and images after max-age expires, or on reload.
  • CDNs revalidating with the origin.
  • API clients using ETags to poll efficiently.

Fix it on the server

  • Send the same Cache-Control, ETag, Expires, Vary and Content-Location headers you would send on the 200.
  • If ETags differ between servers behind a load balancer (Apache used to include inode numbers), clients never get 304s; use content hashes or FileETag MTime Size.
  • Weak ETags (W/"...") are fine for 304; nginx turns strong ETags into weak ones when it gzips.

Fix it as a client or visitor

  • A 304 with stale content means the validator matched wrongly; check that the server changes ETag or Last-Modified when content changes.
  • Hard reload (Ctrl+Shift+R) bypasses revalidation if you need a fresh copy.

Headers that go with 304

HeaderRole
ETagCurrent validator, compared against If-None-Match.
Last-ModifiedCompared against If-Modified-Since.
Cache-ControlRefreshes freshness lifetime of the cached copy.

Example response

HTTP/1.1 304 Not Modified
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
Cache-Control: max-age=600
Date: Tue, 10 Nov 2026 12:00:00 GMT

Opens the HTTP headers tool with your URL filled in; it shows the status line and headers of every redirect hop.

Checking a whole domain's redirects? The HTTP status checker follows http, https, www and non-www variants and shows every hop.