Subject: Re: conditional-request implementation feedback

From: Henrik Nordström <[email-masked]>
Date: Mon, 06 Sep 2010 00:45:18 +0200

tis 2010-08-24 klockan 02:01 -0600 skrev Eric J. Bowman:

> "If the request would normally result in anything other than a 200 (OK)
> status code, or if the passed If-Modified-Since date is later than the
> server's current time or otherwise invalid, the response is exactly the
> same as for a normal GET."

All these "normally result in anything other than a 200 (OK) or 412"
type of statements should be generalized to "normally without any
conditionals result in anything other than a 2xx", not just the specific
conditional being discussed. Alternative all references to 412 in those
statements replaced with 304 instead. Having 412 there do not make
sense, no other conditions can make a 412 a non-412. Equally referencing
200 in specific is nonsense. Success is 2xx, not just 200.

If there is multiple conditionals in an request then all conditionals
applies.

There is no specific order of evaluation between specified conditionals,
but there is several MUST return 412 and SHOULD return 304/2xx
conditions where MUST as always have higher priority than SHOULD.

The order of evaluation of conditionals is

0. Conditionals not applicable, ignored. (MUST)
1. MUST respond with XXX (generally 412)
3. SHOULD respond with YYY

If conditionals contradict then 412 is generally the only possible
result, even if one condition in isolation would cause a 304 response.
Or put another way if one condition in isolation says MUST respond with
412 then it's 412 no matter what the other conditions says.

Example:

If-Match: "a"
If-None-Match: "a"

GET/HEAD -> 304 if resource has etag "a", 412 otherwise.
other methods -> 412 only possible result

Regards
Henrik