HTTP 304 Not Modified: What It Means and When You See It
Quick Answer
HTTP 304 Not Modified means the cached version of the resource is still valid. The server is telling the client to use its cached copy, saving bandwidth.
How HTTP 304 Works
HTTP 304 Not Modified is a caching response. The client sends a conditional GET with If-None-Match (ETag) or If-Modified-Since headers. If the resource has not changed, the server returns 304 with no body - the client uses its cached copy. This saves bandwidth and reduces server load. 304 responses do not include a body; the cached response body is used. The browser handles this automatically for HTML pages and assets.
Implementing ETags for 304
Node.js/Express: the etag package generates ETags automatically. Set Cache-Control: no-cache to force revalidation on each request while still benefiting from 304. Example: res.set("ETag", hash(content)); res.set("Cache-Control", "no-cache"); if (req.headers["if-none-match"] === etag) { res.sendStatus(304); return; } res.send(content). In Next.js, static assets get ETags automatically. API routes need manual ETag implementation for conditional responses.
Try the interactive tool
Convert any value instantly — no sign-up required
Frequently Asked Questions
Related Values
100
HTTP 100 Continue means the server has received the request headers and the client should proceed to send the request body. It is an interim response used to inform the client to continue.
101
HTTP 101 Switching Protocols indicates the server is switching to the protocol specified in the Upgrade header field. Commonly used when upgrading to WebSocket connections.
200
HTTP 200 OK is the standard success response. The request has succeeded and the server has returned the requested resource in the response body.
201
HTTP 201 Created means the request succeeded and a new resource was created as a result. The Location header typically points to the new resource URL.