304 Not Modified

The cached copy the client already holds is still current, so the server sends no body.

Status

HTTP/1.1 304 Not Modified

Details

304 answers a conditional request. The client sends If-None-Match with an ETag or If-Modified-Since with a date, and if nothing changed the server replies 304 with headers only. The client then serves its stored copy. This is the single largest bandwidth saving mechanism in everyday HTTP.

The response must not include a body, and it must carry the validators and cache headers that would have accompanied a 200 so the client can update its freshness bookkeeping.

Headers

Common causes

How to fix it

As the client

As the server

Examples

GET /assets/app.css HTTP/1.1
Host: www.example.com
If-None-Match: "9f2c31"

HTTP/1.1 304 Not Modified
ETag: "9f2c31"
Cache-Control: public, max-age=86400

Notes for proxy users

Crawlers that store validators and send conditional requests get 304s instead of full pages, which cuts bandwidth and lowers the request footprint on the target site. That is worth doing even on unmetered proxy plans because it reduces the load pattern that triggers rate limiting.

Specifications

RFC 9110 §15.4.5

See also