- From: Jeffrey Mogul <mogul@pa.dec.com>
- Date: Wed, 11 Nov 98 14:58:51 PST
- To: Ross Patterson <ROSSP@ss1.reston.vmd.sterling.com>
- Cc: http-wg@hplb.hpl.hp.com
Ross Patterson writes: In section 14.26 "If-None-Match", the statements "If "*" is given and no current entity exists, then the server MAY perform the requested method as if the If-None-Match header field did not exist." and "The meaning of "If-None-Match: *" is that the method MUST NOT be performed if the representation selected by the origin server (or by a cache, possibly using the Vary mechanism, see section 14.44) exists, and SHOULD be performed if the representation does not exist." conflict on the topic of "If-None-Match: *". The former asserts that the server MAY perform the request, the latter that it SHOULD. I think the MAY is correct. Hmm. I confess that I no longer remember all of the discussion behind this, but I lean towards SHOULD. Consider the request: PUT /foo.data HTTP/1.1 Host: whatever.com If-None-Match: * Content-Length: 0 The basic intent is to prevent a race condition where the origin server performs this request and overwrites an existing resource when the client didn't realize it already exists. But in the absence of that pre-existing resource, presumably we want the effect to be the same as PUT /foo.data HTTP/1.1 Host: whatever.com Content-Length: 0 Of course, I don't think we ever state whether a server SHOULD or MAY perform any arbitrary (but valid) request that it receives. MUST would be too strong - there might be resource constraints that the server needs to observe. But I think it would be unfortunate if HTTP servers started rejecting requests for essentially random reasons, and not what the average user expects, and so "SHOULD" seems like the more appropriate choice. I'll avoid commenting on whether any existing implementations do, in fact, reject requests for seemingly random reasons :-) -Jeff
Received on Wednesday, 11 November 1998 15:03:15 UTC