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.
$Id: progress.html,v 1.12 2001/02/10 19:35:15 hno Exp $