- From: Mark Nottingham <mnot@mnot.net>
- Date: Thu, 12 Mar 2009 15:50:34 +1100
- To: Dan Winship <dan.winship@gmail.com>
- Cc: Julian Reschke <julian.reschke@gmx.de>, HTTP Working Group <ietf-http-wg@w3.org>
Hi Dan, Thanks for the quick comments. A few quick responses in turn below, I'll follow up on the rest ASAP. On 12/03/2009, at 2:40 AM, Dan Winship wrote: > You need to s/Request-URI/request-target/ globally. I noticed that, but it's not clear what the right term is yet, since request-target specifically refers to what comes in on the request- line (last time I looked), which is often not what we want to use; i.e. it also needs to take the Host header into account. I suspect this is going to require some revision (and possibly a new term) in p1. > 2.1. Response Cacheability > > The new text, with the split between what can be cached and what can > be > returned, is MUCH clearer (and more correct) than the old. But I think > the cacheability section would be even clearer if you negated the > sense > of the list, and/or split out the special shared cache rules I'm open to that; the current language is a bit tortured because MAY was switched out for MUST NOTs at the last minute, to make the requirements more clear. > 2.1.1. Storing Partial and Incomplete Responses > >> A cache that does not support the Range and Content-Range headers >> MUST NOT store incomplete or partial responses. > > FWIW, this is now redundant with 2.1. > > > 2.2. Constructing Responses from Caches > >> o selecting request-headers nominated by the stored response (if >> any) match those presented (see Section 2.6), and > > "selecting request-headers" haven't been mentioned yet, so "selecting" > looks like it's a verb not an adjective and then the sentence doesn't > parse. We mostly just need to call out to Section 2.6 here anyway. > Maybe: > > o request-headers used for content negotiation match between the > stored response and the presented request (see Section 2.6), and > >> o the presented request and stored response are free from directives >> that would prevent its use (see Section 3.2 and Section 3.4), and > > s/its/the response's/ > > > 2.3.1.1. Calculating Heuristic Freshness > >> Heuristics MUST NOT be used for other response status codes. > > It is not possible to define heuristic freshness for new status codes? Good question, I think we need to discuss that. > 2.3.2. Calculating Age > > The rules don't say what date_value is for a response with no Date > header. Part 1, 8.3 says that "A received message that does not have a > Date header field MUST be assigned one by the recipient if the message > will be cached by that recipient", but doesn't say what that value > should be. Given the rules here, I suspect it should add a Date header > with request_time, to make the worst-case assumption about its age? > > Likewise, the rules don't say what age_value is when the response has > no Age header. In this case, it probably shouldn't even do the steps > of the calculation involving age_value... > > The detailed description of the Age computation uses "now" twice where > it means "response_time": > >> corrected_received_age = max(now - date_value, age_value) > >> corrected_initial_age = corrected_received_age >> + (now - request_time) > > ("now" is the time when the response is being served to a client, as > opposed to "response_time", which is when it was received from the > server.) The summary at the end uses "response_time" correctly. > > Even after fixing that, the math still seems wrong, because there's no > reason to worry about "response_delay" if you're using the > "response_time - date_value" case for corrected_received_age. (Unless > you're worried about clock skew, but in that case it's still adding > response_delay in the wrong place.) > > I think the correct calculation for corrected_initial_age is something > like: > > response_delay = response_time - request_time; > > if (response_time > date_value) > apparent_age = response_time - date_value; > else /* clock skew! */ > apparent_age = response_delay; > > if (is_first_hand_response) > corrected_initial_age = apparent_age; > else { > corrected_age_value = age_value + response_delay; > corrected_initial_age = max(apparent_age, corrected_age_value); > } > > or maybe > > apparent_age = max(response_time - date_value, response_delay); > > if you want to assume clock skew is more likely than very-new > responses. > > > 2.3.3. Serving Stale Responses > >> Caches SHOULD NOT return stale responses unless they are >> disconnected >> (i.e., it cannot contact the origin server or otherwise find a > > s/it cannot/they cannot/ > > > 2.5. Request Methods that Invalidate > >> The following HTTP methods MUST cause a cache to invalidate the >> Request-URI as well as the Location and Content-Location headers (if >> present): > > Part 3, 5.7 says "The meaning of the Content-Location header in PUT or > POST requests is undefined; servers are free to ignore it in those > cases", so presumably the rule here only applies to Content-Location > in > the response headers? > > > 3.2.2. Response Cache-Control Directives > > The discussion of optional field-names in "private" and "no-cache" is > vague about whether the cache MAY or MUST revalidate when handling a > subsequent request for that resource. That is, if another request for > the resource comes in, and the cached response is still fresh, is the > cache allowed to return it, minus the forbidden headers, or is it > required to revalidate, and merge in new values of those headers from > the 304 response?) I think we have an existing issue for this (am offline so can't check); if not will add one. > Under no-cache: > >> This allows an origin server to prevent caching even by caches >> that have been configured to return stale responses. > > That describes must-revalidate. no-cache is stronger than that. Maybe: > > Essentially, a response returned with this directive is never > fresh, and is never allowed to be served stale. > >> names, this requirement is limited to the field-values assosicated > > s/assosicated/associated/ > > -- Dan > > -- Mark Nottingham http://www.mnot.net/
Received on Thursday, 12 March 2009 04:51:15 UTC