Subject: If-Match + Vary

From: Alex Rousskov <[email-masked]>
Date: Thu, 19 Dec 2002 11:18:27 -0700 (MST)

Hi there,

	RFC 2616 has the following requirement in section 14.24
"If-Match":

   The meaning of "If-Match: *" is that the method SHOULD 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
   MUST NOT be performed if the representation does not exist.

The SHOULD part is clear. I am not sure I understand the intent and
implications of the MUST part. It says "if the representation does not
exist". What representation? The one "selected by the origin server"?
Well, one cannot select something that does not exist! I assume that
the following wording would reflect the intent better:

   The meaning of "If-Match: *" is that the method SHOULD be performed
   if the origin server (or a cache) can select a representation,
   and MUST NOT be performed if no representation can be
   selected.

The above wording seems to imply that only origin servers should be
subject to the MUST part of the requirement because a cache cannot
know whether the origin server has selectable representations that are
not currently cached. In other words, a cache should never reply with
412 (Precondition Failed) to an "If-Match: *" request for a Vary-ed
resource, the cache should forward the request to the server instead.

Moreover, a cache should never reply with 412 (Precondition Failed)
to any If-Match request for a Vary-ed resource with no matching
representation cached, because the cache cannot know whether a
matching representation is available on the server.

Can the author of the above RFC paragraph (or anybody who cares)
confirm my understanding, please?

Thank you,

Alex.

-- 
                            | HTTP performance - Web Polygraph benchmark
www.measurement-factory.com | HTTP compliance+ - Co-Advisor test suite
                            | all of the above - PolyBox appliance