new editorial issue IM_IUS_412 [Was: seek clarification on conditional hdrs]

[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