- From: Jeffrey Mogul <mogul@pa.dec.com>
- Date: Wed, 25 Feb 98 18:36:22 PST
- To: http-wg@cuckoo.hpl.hp.com
[This is an excerpt of the relevant parts of
http://www.ics.uci.edu/pub/ietf/http/hypermail/1998q1/0408.html
with some slight rephrasings to make it self-contained, but does
contain any new material.]
In this example
GET /foo.html HTTP/1.1
Host: research.bell-labs.com
If-Match: "xyzzy"
If-Unmodified-Since: Wed, 25 Feb 98 14:51:40 GMT
there is a question as to whether this means that the request is
performed if all of the "If-*" conditions are met, or if at least one
of them is met. The language in the spec for If-Match is:
If none of the entity tags match ..., the server MUST NOT perform
the requested method, and MUST return a 412 (Precondition Failed)
response. [...]
If the request would, without the If-Match header field, result in
anything other than a 2xx status, then the If-Match header MUST be
ignored.
and the language for If-Unmodified-Since is:
If the requested variant has been modified since the specified
time, the server MUST NOT perform the requested operation, and MUST
return a 412 (Precondition Failed).
If the request normally (i.e., without the If-Unmodified-Since
header) would result in anything other than a 2xx status, the
If-Unmodified-Since header should be ignored.
It turns out that there is a contradiction here: if none of
the entity tags match AND if the variant has been modified, then
each header "wants" to cause us to return 412, but the rules
for each header individually says "ignore me because my buddy
wants us to return 412". So I think the phrase "2xx status"
in both quotes above should be "2xx or 412 status".
With this contradiction resolved, the meaning of the example is clear:
the method is performed if at least one entity tag from the If-Match
header field matches the current entity tag, AND if the resource's
modification date matches the value of the If-Unmodified-Since header
field.
Specifically, in rev-02:
(1) In section 14.25 (If-Match), change:
If the request would, without the If-Match header field, result in
anything other than a 2xx status, then the If-Match header MUST be
ignored.
to
If the request would, without the If-Match header field, result in
anything other than a 2xx or 412 status, then the If-Match header
MUST be ignored.
(2) In section 14.28 (If-Unmodified-Since), change:
If the request normally (i.e., without the If-Unmodified-Since
header) would result in anything other than a 2xx status, the
If-Unmodified-Since header should be ignored.
to
If the request normally (i.e., without the If-Unmodified-Since
header) would result in anything other than a 2xx or 412 status,
the If-Unmodified-Since header should be ignored.
-Jeff
Received on Wednesday, 25 February 1998 18:38:48 UTC