Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the meaning of the HTTP header Vary:*

As far as I know, the HTTP Header Vary specifies a comma separated list of HTTP headers that need to be considered by caches together with the URL when deciding if a request is a cache hit or miss.

If that header is omitted, means that only the URL will be considered.

But what happen when the header is Vary:* ?

RFC 2616 14.4

A Vary field value of *** signals that unspecified parameters not limited to the request-headers (e.g., the network address of the client), play a role in the selection of the response representation. The * value MUST NOT be generated by a proxy server; it may only be generated by an origin server.

RFC 2616 13.6

A Vary header field-value of * always fails to match and subsequent requests on that resource can only be properly interpreted by the origin server.

Does it means that all requests with this header are going to be a cache miss?

I find out that ASP.NET is returning that HTTP header if you use their OutputCacheAttribute, and you have to disable explicitly that behaviour if you don't want the header, or you want to specify custom headers, so I (want to) believe it is unlikely.

Which is the practical meaning of Vary:* ?

Thanks.

like image 223
vtortola Avatar asked Sep 29 '11 15:09

vtortola


People also ask

What does HTTP header mean?

An HTTP header is a field of an HTTP request or response that passes additional context and metadata about the request or response. For example, a request message can use headers to indicate it's preferred media formats, while a response can use header to indicate the media format of the returned body.

What is vary accept Encoding header?

It is allowing the cache to serve up different cached versions of the page depending on whether or not the browser requests GZIP encoding or not. The vary header instructs the cache to store a different version of the page if there is any variation in the indicated header.

What does vary origin mean?

Vary: Origin When a user agent receives a response to a non-CORS request for that resource (for example, as the result of a navigation request), the response will lack `Access-Control-Allow-Origin` and the user agent will cache that response.

What is vary user agent?

The Role of Vary: User-AgentIt tells Dynamic caching which version of your page should be served depending on the browser type, which can prevent a cached desktop version being served to a mobile visitor.


1 Answers

Vary:* tells caches that the response has been chosen based on aspects beyond the usual aspects of HTTP content negotiation (e.g. Accept, Accept-Language, Accept-Charset).

Effectively this tells the cache not to cache the response. That is the meaning of "subsequent requests on that resource can only be properly interpreted by the origin server". The cache must forward these requests to the origin server.

Edit: Vary is orthogonal to caching. Consider this:

GET /foo HTTP/1.1

200 Ok Cache-Control: maxage=60 Content-Location: /foo.html Vary: *

Vary:* tells caches that the response cannot be cached for requests to /foo. But because of the Content-Location header, caches can still store the response for requests to /foo.html.

like image 192
Jan Algermissen Avatar answered Sep 20 '22 09:09

Jan Algermissen