- From: Foteos Macrides <MACRIDES@sci.wfbr.edu>
- Date: Wed, 02 Oct 1996 10:48:25 -0500 (EST)
- To: fielding@liege.ICS.UCI.EDU
- Cc: http-wg%cuckoo.hpl.hp.com@hplb.hpl.hp.com
"Roy T. Fielding" <fielding@liege.ICS.UCI.EDU> wrote: >> Just to elaborate on that, as already stated in the HTTP/1.1 draft, >> only the server (actually, in the case of FORMs with METHOD=POST, its CGI >> script) can determine if a POST is idempotent, based on how the content >> entity in the request is handled by the server/script. Therefore, it is >> important (IMHO) that the HTTP protocol provide for an Idempotent reply >> header by which the client can be informed if the POST was idempotent >> ("yes"), with the default remaining "no". > >You are talking about establishing a relationship between the content ^^^^^^^ >of the current response and a resource (identified by a URL) which ^^^^^^^^^^^^^^^|||||||| >corresponds to the meaning of the original POST request, such that the >original request can be repeated in a safe manner. Use > > Link: <http://site/that_resource>; rel=source > >for supplying such a relationship. Absolutely not! Your earlier messages in this thread reflect the same confusion about the entity to which POST content refers, which I thought I had explained, but I'll try again, hopefully without being *too* verbose. :) :) The HTTP/1.1 -07 draft says: 9.5 POST The POST method is used to request that the destination server accept the entity enclosed in the request as a new subordinate of the resource ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ identified by the Request-URI in the Request-Line. POST is designed to ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ allow a uniform method to cover the following functions: [...] The actual function performed by the POST method is determined by the ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ||||||||||||||||| server and is usually dependent on the Request-URI. The posted entity is |||||| ^^^^^^^^^^^^^ subordinate to that URI in the same way that a file is subordinate to a ^^^^^^^^^^^^^^^^^^^^^^^ directory containing it, a news article is subordinate to a newsgroup to which it is posted, or a record is subordinate to a database. Only the server can determine the idempotence of a POST *request*, upon also receiving the particular, subordinate, "content entity" that accompanies the *request*, and acting on it or not. The Cache-Control headers, or your rel, deal with a different entity, that is associated with the server's *reply*, *not* with the "content entity" that is associated with the *request*. There is nothing presently in any protocol dealing with the disposition of that POST content entity, once it has been received and acted upon (or not) by the server, beyond the issue of redirection. That is, if the server returns 301 or 302, the UA should seek confirmation and then issue another POST request including the content entity, but if it is 303, issue a GET and not use the content entity. But once a server accepts the POST content entity, and changes something (a non-idempotent action), or simply retrieves something (an idempotent action), the headers presently returned by the server apply to the entity (body) accompanying the server's reply, not to the content entity which accompanied the UA's request. Any caching servers interposed between the UA and origin server concern themselves with that *reply* entity, and an Idempotent: yes | no would change *nothing* for those servers, because it doesn't apply to that reply entity. No currently deployed client, to my knowledge, including ones which cache reply enties themselves, save their POST content entities to disk, or anywhere, beyond the current session. They would need to do so, and develop rules and mechanisms for saving POST content entities beyond the current session, to support bookmarking for FORM submissions with METHOD=POST, as they presently can and actually do for FORM submissions with METHOD=GET (by virtue of each subordinate *request* entity being appended to the ACTION URI as ?searchpart fields). Here are typical bookmarks for METHOD=GET: <A HREF="http://server/script?searchpartA">Blah A</A> <A HREF="http://server/script?searchpartB">Blah B</A> Here's what that first URL really is, i.e., with implied parameters made explicit: http://server/script;method=get ;get-content-type=application/x-www-form-urlencoded ?searchpartA Here's a "parameterized" URL that could be used as a means (without need for IETF standards if a particlar client restricted this usage to it's own bookmark files, though further public discussion and standards would be nice 8-) for bookmarking with METHOD=POST: http://server/script;method=post ;post-content-type=multipart/formdata ;post-content=path_to_a_file_with_contentA Fote ========================================================================= Foteos Macrides Worcester Foundation for Biomedical Research MACRIDES@SCI.WFBR.EDU 222 Maple Avenue, Shrewsbury, MA 01545 =========================================================================
Received on Wednesday, 2 October 1996 07:55:53 UTC