Mobile app version of vmapp.org
Login or Join
Sent6035632

: Is it feasible to use Vary: headers with If-none-match: to improve caching? As we all know, sending a response header Vary: Some-Header causes (or should cause) caches to store different variants

@Sent6035632

Posted in: #Cache #HttpHeaders #Proxy

As we all know, sending a response header Vary: Some-Header causes (or should cause) caches to store different variants of the response, one for each value of Some-Header: it encounters in requests.
However, this method has drawbacks with headers that show enormous variation, such as User-Agent: or Accept-Language:.

Let's say our server wants to vary based on such a very variable header, but really just serves a handful of variants. I think the followin almost works:


The server uses all request headers to determine which variant to serve; let's assume it decides to send variant #42
The server sends Etag: variant42-version1 and Vary: If-none-match
The next time this user wants to access the page, it presumably adds If-none-match: variant42-version1 and therefore tries to retrieve that from the cache
However, there is no such entry in the cache. But a fresh query from the server will cause a response with that Etag again, which will be cached for the future
If the same user wants to access the page a third time, he will again add If-none-match: variant42-version1 and this time be served the cached content


The problem with this is the initial case of no Etag at all. Those are the first time visitors for which the complicated evaluation which version to serve needs to be performed - but specifically for these we would still need to vary with the original headers instead of If-none-match ... a vicious circle.

Can this be made work? (Or can the desired effect of reducing cachable variants be achieved differently?)

10.01% popularity Vote Up Vote Down


Login to follow query

More posts by @Sent6035632

1 Comments

Sorted by latest first Latest Oldest Best

 

@Berumen354

Based on your question and your clarification comment you would be better served using the URL rather than a header in order to best deal with downstream caching servers. In other words the first time you get the connection check the language header and then redirect them to the appropriate content via URL (something like domain.com/en/ or domain.com/de). By doing this you will not have to do anything special for caching servers. Additionally some caching servers are not correctly configured to support variants on pages and so can break the header based language changes (the user wants German language but the English version is cached and returned from the caching server).

Even the largest sites on the internet such as Microsoft put the language code into the URL to ensure the best support for downstream caching servers.

10% popularity Vote Up Vote Down


Back to top | Use Dark Theme