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.

Example

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"

References

HTTP series

This article is part of an ongoing series about the HTTP protocol.

If you want to follow along as I write them, you can Subscribe to my Atom feed or Mailing list.

Informational 1xx

Successful 2xx

Redirection 3xx

Client Error 4xx

Web mentions