- From: Koen Holtman <koen@win.tue.nl>
- Date: Fri, 19 Apr 1996 17:16:26 +0200 (MET DST)
- To: mogul@pa.dec.com (Jeffrey Mogul)
- Cc: http-caching@pa.dec.com
Jeffrey Mogul:
>
>This was one of the few remaining sections of the draft that I had
>not been able to write. After the discussions of the past few days
>(online and on the telephone), and a lot of puzzling, I think I've
>been able to write a fairly concise set of rules for constructing
>and using cache keys. Comments are welcome, but due to various
>schedule constraints, something very close to this is going to be
>in Monday's draft from Jim.
>
>-Jeff
>
>13.12 SLUSHY: Cache keys
> A ``cache key'' is a value used to identify a cache entry. HTTP
> caches construct keys in three different ways:
Change this to:
HTTP caches construct three different kinds of cache keys:
> - Some subset of the fields stored with a cache entry
> constitute the ``entry key'' for that entry. These may
> include the Request-URI, some request-header fields, and
> some response-header fields.
>
> - Some subset of the fields of a response, together with
> perhaps the Request-URI, constitute the ``replacement key''
> of a response.
>
> - Some subset of the fields of a request, together with the
> Request-URI, constitute the ``lookup key'' of a request.
>
> When a cache receives a request, it builds a lookup key from that
> request, then tries to find (lookup) a cache entry with a matching
> entry key.
I think it is better to talk about `find (lookup) a matching cache
entry', and to forget about the entry key concept.
> If such a match exists, then the cache can decide (based
> on the other caching rules) whether to return that entry in reply to
> the request.
>
> When a cache receives a response, it builds a replacement key from
> that response, and from the request that elicited it. It uses this
> key to find any previously stored entry with a matching entry key.
^^^^^^^^^^^^^^^^^^
why not `equal replacement key'?
> If such an entry exists, the cache replaces the old entry with the
> new one.
>
> The term ``replacement'' means to remove the old entry from the
> cache, and then to insert the new entry. It does not imply a
> modification of an existing entry.
>
> This section describes specifically how the three kinds of keys are
> constructed, and how a cache determines if keys match.
>
>13.12.1 SLUSHY: Key-matching procedure
> We express replacement keys as a tuple (URI, variant-ID), in which
> the variant-ID may be null.
Sigh. I put text in the spec two weeks ago in which replacement keys
also containing the Content-Location header. I am willing to change
that text if you are willing to make variant-IDs quoted stings instead
of tokens.
> We express lookup keys as a tuple (URI,
> variant-ID, all-request-headers), in which the variant-ID may be
> null. The all-request-headers element of the tuple is not always
> used, but is included here as a notational convenience. We express
> entry keys as the tuple (URI, variant-ID, sel-hdr-values), in which
> the variant-ID may be null, and the sel-hdr-values may either be
> null, or may be a set of request headers.
The variant-ID cannot be part of the lookup key. You write:
- Some subset of the fields of a request, together with the
Request-URI, constitute the ``lookup key'' of a request.
and there is no variant-ID in the request.
> A replacement key matches an entry key if both their URI elements
> match and their variant-ID elements match. (A null variant-ID does
> not match a non-null variant-ID.)
>
> A lookup key matches an entry key if both their URI elements match
> and their variant-ID elements match, and either
>
> - the sel-hdr-values element of the entry key is null
>
> or
>
> - the sel-hdr-values element of the entry key matches the
> appropriate headers in the all-request-headers element of
> the request key, according to the matching rules in section
> 10.v.
There needs to be added detail here about Vary: {other}, and probably
also about freshness.
> This description matching algorithm is clearly not the most efficient
> implementation of an equivalent algorithm. A cache may use any
> algorithm that yields equivalent results. For example, it may use a
> hierarchical approach where cache entries are grouped into sets by
> the URI and variant-ID, and only if a set includes non-null
> sel-hdr-values elements does the cache need to consider the other
> request headers.
>
> If on a cache lookup there are two or more entries that appear to
> match the request, then the one with the most recent Date value MUST
> be used.
(Note: I did not have time to read the other sections in the original
message yet).
Koen.
Received on Friday, 19 April 1996 15:57:45 UTC