The Vary HTTP header

The Vary header is a HTTP header whereby a HTTP server can indicate to itermediate caches that the contents of the URI varies based on specified aspects of the client request.

HTTP/1.1 references

12.1 Server-driven Negotiation
Describes what content server-driven content negotiation is, and HTTP requirements for servers doing this. The other two sections in the same chapter is also interesting, but not directly related to the Vary header.
13.6 Caching Negotiated Responses
Describes the requirements put on caches implementing support for caching of server-driven content-negotiated objects.
14.44 Vary
The syntax and abilities of the HTTP Vary header.
14.9 ETag
Description of the ETag HTTP header
14.26 If-None-Match
If-None-Match conditional queries to verify if any of the cached entities are valid for the requested resource.
13.3.3 Strong and weak tags
Describes the relation between strong and weak tags, and the conditions when Last-Modified can be viewed as a strong tag.

Notes

Vary can be supported by caches in three degrees

  1. No support, denying caching of varying objects
  2. Basic support, supporting exact matches only.
  3. Full support, supporting fuzzy matches via conditional queries to the origin server to find if any of the cached entities match the request when there is no exact match. The obvious example is "Vary: *", but also provides for when the server returns the same object to slightly different requests (for example different versions or platforms of the same browser). Requires the support and use of ETag, and the ability to index the ETag's of the cached variants for a given URI.

Squid Now! Cache Now! Valid HTML 4.0! SourceForge
$Id: vary-header.html,v 1.7 2001/02/10 19:35:15 hno Exp $