- From: Koen Holtman <koen@win.tue.nl>
- Date: Thu, 18 Apr 1996 10:20:48 +0200 (MET DST)
- To: koen@win.tue.nl (Koen Holtman)
- Cc: fielding@avron.ICS.UCI.EDU, mogul@pa.dec.com, http-caching@pa.dec.com
This is a followup to my own message. When I wrote the reply below, I was tired and under time pressure, so I wrote some things that were wrong or confusing. I'll correct them here. Koen Holtman: > >Roy T. Fielding: >>[Jeff Mogul:] >>> It might also be nice if someone could explain how an >>> origin server decides whether to use opaque negotiation or transparent ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>> negotiation. However, I think from the point of view of caching, I ^^^^^^^^^^^ >>> don't need to know. Oops, I read `preemptive negotiation or reactive negotiation' above, not `opaque or transparent'. Roy's response: >>It would normally be done via server configuration (in practice, >>on a directory-by-directory basis or using .meta/.multi files). Was 100% right. I wrote >No. and this was 100% wrong, because I misread the question. [Jeff:] >>> I would rephrase that as: The variant-ID is used as part of the cache >>> key only if the Request-URI is not sufficient to determine a specific >>> entity. (And then only for conditional requests and for replacing >>> existing cache entries.) >> [Roy:] >>Yep. > >No, change that to `the request URI and the contents of a >Content-Location header (if present)'. This also needs some clarification. In principle, for transparent negotiation, the specific entity returned can be identified with a single URI, but this will not be the URI of the request, but the URI in the Content-Location header. If you get a 200 (OK) response from a transparently negotiated resource (which sends an Alternates and a Content-Location header in the response), the Content-Location header contains the URI under which the entity returned is available. For example, after a request: GET /blah HTTP/1.1 Accept-Language: en, nl you will get back, from a transparently negotiated resource, the response: HTTP/1.1 200 OK Content-Location: http://x.com/blah.en.html Alternates: { "http://x.com/blah.en.html" 1 {language "en"}} { "http://x.com/blah.fr.html" 1 {language "fr"}} Date: .. Content-Language: en Cval: "3212419" ... ..English text about blah.. IF you do a direct GET on http://x.com/blah.en.html, you will get the same English text entity, but a plain 1.1 cache does not have to know that. A plain 1.1 client will not know how to parse the Alternates header, and won't be able to interpret the Content-Location header, because the syntax of Alternates and the meaning of Content-Location will be defined later, in the content negotiation draft. What the 1.1 client can do (according to the text I wrote for the 1.1 draft): - for answering requests on behalf of the origin server: Alternates can be interpreted as Vary: {accept-headers}. So the cache can store the response as a variant and return it for new requests if request headers match in a certain way. - for cache refreshing: the contents of the Cval header (in this case "3212419" can be put in the If-Invalid header sent to the origin server. A typical if-Invalid header sent, if 3 variants are caches, would be If-Invalid: "3212419", "453232", "756456" (Note that the origin server must ensure that all opaque validators for the three variants are indeed different, because there is no variant-id attached to disambiguate them.) - for cache replacement: The contents of the Content-Location header can be used as a replacement key. See the cache replacement text I wrote for the 1.1 draft. I hope this clears up some of the confusion I generated with my previous reply. Koen.
Received on Thursday, 18 April 1996 08:51:13 UTC