- From: Jeffrey Mogul <mogul@pa.dec.com>
- Date: Thu, 26 Mar 98 16:37:41 PST
- To: HTTP Working Group <http-wg@cuckoo.hpl.hp.com>
Richard L. Gray writes: In section 8.2.4, Requirements for HTTP/1.1 proxies, it says: "- If the proxy knows that the version of the next-hop server is HTTP/1.0 or lower, it MUST NOT forward the request, and it MUST respond with a 417 (Expectation Failed) status." The problem is with the normative MUSTs, which we think ought to be at most normative SHOULDs (and perhaps this bullet should just be removed). The reasons are: - There is no interoperability issue here, since if the version of the next-hop server is unknown, the request, including the Expect header field, MUST be forwarded, and the client needs to be able to (for compatibility reasons) time out waiting for the 100 (Continue) and send the body anyway. - The likely behaviour of a client, in the case of recieving a 417 with out some reason (like a challenge for credentials), is to just retry without the Expect header, so the only effect is to increase latency. Our proxy implementation currently will just generate a 100 (continue) in this case. I apologize for not catching this earlier (I checked and it goes at least back to rev-01). I suppose you're right that it's inappropriate to base a MUST NOT with a fact that the proxy is not required to know or verify. So since we probably don't want add a mandatory round-trip here (i.e., proxy sends OPTIONS method to next-hop server to see what its version is), this "MUST NOT" ought to be a "SHOULD NOT". Also, in the same section, it says: "Proxies SHOULD maintain a cache recording the HTTP version numbers from recently-referenced next-hop servers." This is not an interoperability issue either, and so we do not think the "SHOULD" ought to be normative. Perhaps it ought to be phrased as an "encouragement", as advice to implementers is elsewhere. Here I think the rules of RFC2119: 3. SHOULD This word, or the adjective "RECOMMENDED", mean that there may exist valid reasons in particular circumstances to ignore a particular item, but the full implications must be understood and carefully weighed before choosing a different course. and Imperatives of the type defined in this memo must be used with care and sparingly. In particular, they MUST only be used where it is actually required for interoperation or to limit behavior which has potential for causing harm (e.g., limiting retransmisssions) For example, they must not be used to try to impose a particular method on implementors where the method is not required for interoperability. support this as a SHOULD, under the "limiting retransmissions" rule. The notion that SHOULD/MUST are allowed "only if required for interoperability" is a misreading of this "For example" in RFC2119. It's specifically allowed to use SHOULD/MUST for "limiting retransmisssions" and that isn't really an "interoperability issue." -Jeff
Received on Thursday, 26 March 1998 16:39:52 UTC