- From: Jeffrey Mogul <mogul@pa.dec.com>
- Date: Mon, 31 Mar 97 16:42:49 PST
- To: http-wg@cuckoo.hpl.hp.com
Roy T. Fielding: > Many HTTP/1.0 cache implementations will treat an Expires value that > is less than or equal to the response Date value as being equivalent > to the Cache-Control response directive "no-cache". If an HTTP/1.1 > cache receives such a response, and the response does not include a > Cache-Control header field, it SHOULD consider the response to be > non-cachable in order to retain compatibility with HTTP/1.0 servers. Koen Holtman: Eek! This is a completely new SHOULD as far as I can see. I oppose adding this SHOULD because it leads to sub-optimal caching. I don't see any need to be compatible with the `Many HTTP/1.0 cache implementations' the paragraph talks about. I consider these `many implementations' to be sub-optimal, because they should be using I-M-S to revalidate the stale entry instead of just throwing it away. One goal for HTTP/1.1 is that it not break any HTTP/1.0 implementations. The HTTP/1.0 not-quite-specification (RFC1945) says, for "Expires" Applications must not cache this entity beyond the date given. I.e., the HTTP/1.0 interpretation here is a MUST, and we are actually relaxing it by saying "SHOULD". Lest one think that this is some newfangled thing in RFC1945, I went back to earlier texts for "Expires". Back in March, 1995, draft-ietf-http-v10-spec-00.txt said Caching clients (including proxies) must not cache this copy of the resource beyond the date given, unless its status has been updated by a later check of the origin server. (which is probably clearer than the RFC1945 wording). Going back even further, to November 1993, draft-ietf-iiir-http-00.txt said that "Expires" Gives the date after which the information given ceases to be valid and should be retrieved again. (whether this "should" is a SHOULD or a MUST isn't clear, since the term "should" is often used in this document in places where we would almost certainly use MUST today.) Aside from that, this probably does not pose a serious threat to cache performance. On the other hand, it could probably be worded better. How about something like this: Many HTTP/1.0 servers expect caches to treat an Expires value that is less than or equal to the response Date value as being equivalent to the Cache-Control response directive "no-cache". If an HTTP/1.1 cache receives such a response, and the response does not include a Cache-Control header field, it SHOULD NOT use the response in reply to a subsequent query without first revalidating it. I.e., while "max-age=0" does not imply "must-revalidate", "expires now" does. Also, this new SHOULD contradicts the Expires section (14.21): The Expires entity-header field gives the date/time after which the response should be considered stale. A stale cache entry may not normally be returned by a cache (either a proxy cache or an user agent cache) unless it is first validated with the origin server [...] Not as I reworded it. Note that the word "cachable" is used a little too informally in HTTP/1.1 (RFC2068). The definition is cachable A response is cachable if a cache is allowed to store a copy of the response message for use in answering subsequent requests. The rules for determining the cachability of HTTP responses are defined in section 13. Even if a resource is cachable, there may be additional constraints on whether a cache can use the cached copy for a particular request. I believe what Roy meant by "non-cachable" is "not usable without revalidation", not "not storable". -Jeff
Received on Monday, 31 March 1997 16:49:36 UTC