304 Not Modified

304 Not Modified is used in response to a conditional GET or HEAD request. A request can be made condtional with one of the following headers:

  • If-Match
  • If-None-Match
  • If-Modified-Since
  • If-Unmodified-Since
  • If-Range

If-Modified-Since and If-None-Match are used specifically to allow a client to cache results and asks the server to only send a new representation if it has changed.

If-Modified-Since does this based on a Last-Modified header, and If-None-Match with an ETag.


A client does an initial request:

GET /foo HTTP/1.1
Accept: text/html

A server responds with an ETag:

HTTP/1.1 200 Ok
Content-Type: text/html
ETag: "some-string"

The next time a client makes a request, it can include the ETag:

GET /foo HTTP/1.1
Accept: text/html
If-None-Match: "some-string"

If the resource didn’t change on the server, it can return a 304.

HTTP/1.1 304 Not Modified
ETag: "some-string"


HTTP series

This article is part of a series about the HTTP protocol. Read them all here:

Informational 1xx

Successful 2xx

Redirection 3xx

Client Error 4xx

Server Error 5xx

Bad Gateway is Toronto-based team of software engineers. We build good APIs and websites.

Want to work with me on your next project?

Email us

Web mentions