Re: If-match clarification

    The description of If-match describes two possible situations, but those 
    are not all that could occur:
    
    1) If all etags in If-Match match, or If-Match * is used and the entity 
    exists then normal processing occurs.
    
    2) If any etags in If-Match do not match, or If-Match * is used and the 
    entity does not exist, then 412 must be returned.
    
Actually, it says "if *none* of the etags match" ... this is
different from "if any do not match".  Probably this is what
you meant.

    But what about the case of an etag provided in If-Match against a
    resource that no longer exists? Should the server return 404 or
    412?
    
For this case, the actual language used is:

    ... if "*" is given and no current
    entity exists, the server MUST NOT perform the requested method, and
    MUST return a 412 (Precondition Failed) response.

I'm having a hard time understanding the difference between

  "no current entity exists" [for the resource identified by request-uri]

and

  the resource [identified by request-uri] no longer exists (does not exist)

Is there any practical difference between these two statements?

If not, then the meaning of the spec is pretty clear.  Whether it
is what we want is a different question; perhaps I could see returning
404 as being both more reasonable and easier to implement, but in
our current discussions, we're trying to avoid changing the spec.

(And it's not clear to me that GET and PUT should be specified
as generating different status codes in this case; that seems likely
to create complexity in the long run.)

-Jeff

Received on Thursday, 21 June 2007 17:36:19 UTC