Progress report, Vary HTTP header

Progress report of implementing basic Vary support.

Done

Vary meta information
The request headers indicated by Vary are now included in the object metadata on disk. This allows Squid to verify that the cached variant matches the current request on cache hits.
client_side.c logics
The logics in client_side.c for trying to find the correct variant when a varying object is found has been done
HTTP server-side Vary support
The HTTP server side now allows varying objects to be cached with the added request-metadata mentioned above.
Store lookup API
The store lookup API has been extended with storeGetPublicByRequest and storeGetPublicByRequestMethod to allow querying the store based on more information than the URI alone, i.e. Vary headers.
Store key API
The API for generating store keys have been extended similarily to the store lookup API with storeKeyPublicByRequest and storeKeyPublicByRequestMethod
Store key generation
The generated store-key now includes vary information
Virtual "vary" object marker
When a varying URI is detected, a virtual "vary" marker object is now created on the base key (no vary information) of the URI, only containing the Vary header.
PURGE
Support for PURGE of varying objects have been built. If none of the vary request headers are included in the request the marker object will get deleted, else the matching variant.
vary_ignore_expire config option
The vary_ignore_expire config option has been added to work around the fact that many HTTP servers (i.e. Apache) will send an Expires: "now" header in Vary replies sent to HTTP/1.0 clients. When Squid becomes HTTP/1.1 this option will automatically become obsolete. An alternative to using this option is to make use of the Cache-control header.
testing
Many things have been tested, and bugs fixed. See the separate test-protocol
Vary on unknown headers
Vary is now supported on unknown headers by the introduction of httpHeaderGetByName().
Experimental X-Accelerator-Vary header, like Vary, but intended for use within accelerators.

To do

Nothing known on the simple vary support (exact match only).

Known limitations

Only exact Vary matches
This implementation only supports exact vary matches
HTCP
HTCP most likely only finds the "vary" marker object.
ICP/Digests false hits
The Vary object is published in ICP and cache-digests, possibly causing more false hits than neccesary. Is however needed to be able to produce hits for non-Vary aware caches, or ICP in general (Vary aware or not).
No ETag on revalidations
ETag is not used on revalidations, possibly allowing cache stale content to be returned on the first revalidation after the type of variance (headers included in Vary) has changed.

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