- From: Jeffrey Mogul <mogul@pa.dec.com>
- Date: Thu, 16 May 2002 14:48:10 -0700
- To: Bob Scheifler - SMI Software Development <rws@east.sun.com>
- Cc: ietf-http-wg@w3.org
I don't want to get into the "502 vs. 503" discussion, but I think
you should probably assume that HTTP/1.1 is inherently a "best
efforts" delivery mechanism. We certainly did not try to provide
reliable delivery semantics, or even reliable delivery-error
semantics, during the design process (although we did try to provide
reliable caching-error indications, but that's [sort of] one layer
higher in the stack).
Applying the venerable "end-to-end argument" of Saltzer et al., this
implies that if you want to determine if an HTTP method truly
succeeded or not ("at most once") then you need something at a higher
layer than the message-delivery indication. There is some
possibility that the entity-tag mechanism could be used to prevent
duplicate update operations. For example, if the client does a GET
and gets back 'Etag: "abc"' and then does a PUT (or POST) with
'If-Match: "abc"', this should prevent the operation from taking
place *if* both of these assumptions hold:
(1) the server changes the entity tag upon each PUT/POST
(2) the server actually supports If-Match
A plausible reading of the spec (RFC 2616) implies that any server
that hands out Etag headers must support If-Match, but this isn't
explicit (unfortunately) and I am not sure that you can count on it.
See section 14.24 for a little more discussion of this mechanism,
which (as stated there) is intended "on updating requests, to prevent
inadvertent modification of the wrong version of a resource" which I
think is basically why you want at-most-once semantics, right?
-Jeff
Received on Thursday, 16 May 2002 17:48:13 UTC