I also agree with the text suggested by Wendy, with a small edit:

In particular, for a resource that uses the GET method,


=〉

In particular, for a resource that is specified in this document to use the
GET method,

OK?

Richard
On Jul 19, 2014 5:27 AM, "Ben Niven-Jenkins" <[email protected]>
wrote:

> Wendy,
>
> Your suggested text works for me.
>
> Ben
>
> P.S. Whether some frameworks/origins unify GET and POST shouldn't drive
> what we specify IMO as the semantics of GET and POST are different, e.g.
> GET carries the semantic of idempotency which POST does not.
>
> On 18 Jul 2014, at 10:18, Wendy Roome <[email protected]> wrote:
>
> Let me cut to the chase: I suggest that we add the following to the ALTO
> Errata sheet, probably as a new paragraph at the end of "8.3.2.  Client
> Requesting Information Resources":
>
> “An ALTO Client MUST NOT assume that the HTTP GET and POST methods are
> interchangeable. In particular, for a resource that uses the GET method, an
> ALTO Client MUST NOT assume that resource will accept a POST request as
> equivalent to a GET request."
>
> I think that is much less controversial than requiring a server to return
> an error.
>
> As for unifying GET & POST, yes, I agree most web servers try to unify
> them. For static pages, I believe Apache returns the same result for GET &
> POST (at least by default). As for dynamic pages, I think most libraries
> unify them, although some do not. E.g., in Java Servlets, the servlet must
> override a Java method for each HTTP method: doGet(), doPost(),
> doOptions(), doHead(), etc.
>
> However, I believe libraries that unify GET & POST still provide a
> function that returns the method, so scripts can always distinguish between
> GET & POST if desired. That's certainly the case in Richard's  perl
> example.
>
> I also agree that RFC 2616's section on POST is techno-babble at its
> deadliest. :-) But at least the subsequent paragraphs reveal the reality:
> the script can do whatever it wants to. I believe the only important point
> in that section is the statement that POST responses are not cacheable. The
> rest is just hand-waving; it doesn't put any obligations on the client or
> the server.
>
> - Wendy Roome
>
> From: "Y. Richard Yang" <[email protected]>
> Date: Fri, July 18, 2014 at 06:38
> To: Wendy Roome <[email protected]>
> Cc: Ben Niven-Jenkins <[email protected]>, IETF ALTO <[email protected]>
> Subject: Re: [alto] Should get-mode services accept post requests?
>
> Hi Wendy, Ben,
>
> Always interesting, insightful observation. Please see below.
>
> On Thu, Jul 17, 2014 at 4:00 PM, Wendy Roome <[email protected]>
> wrote:
>
>> Ben,
>>
>> However, if a significant number of ALTO servers accept POST as well as
>> GET for full map services, that will establish a de-facto standard, and it
>> will be difficult to define different semantics for POST in the future.
>>
>
>
> Good discussion. Out of curiosity, I looked up POST in wikipedia :-), and
> found this statement in the first paragraph: "The POST request method is
> designed to request that a web server accept the data enclosed in the
> request message's body for storage." Hence, using POST as an update fits
> this description well, although many servers treat GET and POST the same in
> many cases.
>
> I still remember the days when I used perl for CGI, and it always starts
> with the segment:
>    ...
>     $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
>     if ($ENV{'REQUEST_METHOD'} eq "POST")
>     {
>         read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
>     } else {
> $buffer = $ENV{'QUERY_STRING'};
>     }
>
> If the preceding "unification" statement is in a library, the ALTO Server
> programer may not know if $buffer is from GET or POST.
>
> RFC 2616 has the following statement that I never fully understood: "The
> POST method is used to request that the origin server accept the entity
> enclosed in the request as a new subordinate of the resource identified by
> the Request-URI in the Request-Line." But there is the following statement,
> although not to my taste, makes the main, practical point: "The actual
> function performed by the POST method is determined by the server and is
> usually dependent on the Request-URI." In other words, for one given
> Request-URI, GET and POST may return the same result, while for another
> URI, they may differ. I feel that your example below fits into the
> category.
>
> In more details, consider the "bad" case of a single Request-URI uri being
> announced by multiple services: (1) full map; (2) filtered map; (3) update
> to an map. We know that the correct method should be GET, POST, POST
> respectively. Assume that the app does not check if the request is GET or
> POST, for example, due to using a "unifying" library. One "redundancy" that
> the current protocol spec has is the Content-type: (1) has no Content-type;
> (2) should have application/alto-networkmapfilter+json and (3) will be
> something such as "application/alto-networkmapupdate+json. In other words,
> we have some build-in decoding redundancy to resolve the issue you
> mentioned below. Assume that we use only json as the type, then (2) and (3)
> cannot be distinguished.
>
> Make sense?
>
> Richard
>
> Also, the current spec allows a server to use the same URI for Full and
>> Filtered Map services. Eg, consider this IRD fragment:
>>
>>         "my-default-network-map" : {
>>                 "uri" : "http://alto.example.com/networkmap";,
>>                 "media-type" : "application/alto-networkmap+json"
>>         },
>>         "filtered-network-map" : {
>>                 "uri" : "http://alto.example.com/networkmap";,
>>                 "media-type" : "application/alto-networkmap+json",
>>                 "accepts" : "application/alto-networkmapfilter+json",
>>                 "uses": [ "my-default-network-map" ]
>>         },
>>
>> That says that for http://alto.example.com/networkmap, GET returns a full
>> network map, while POST (with the appropriate content type) returns a
>> filtered network map.
>>
>>         - Wendy Roome
>>
>>
>> On 07/17/2014, 03:39, "Ben Niven-Jenkins" <[email protected]>
>> wrote:
>>
>> >Wendy,
>> >
>> >On 16 Jul 2014, at 16:10, Wendy Roome <[email protected]>
>> wrote:
>> >
>> >> Here is a fringe case that doesn't seem to be covered in the protocol
>> >>spec.
>> >>
>> >> If a client sends a POST request to a GET-mode service, like Full Cost
>> >> Map, should the ALTO server reject the request? Or should the server
>> >> accept the request anyway, and just return the map?
>> >>
>> >> And would it depend on the content the client sent? Eg, should the
>> >>server
>> >> accept a POST request with no content, but reject a POST request if the
>> >> client sent a body of (say) type application/alto-costmapfilter+json,
>> on
>> >> the grounds that the client mistakenly thought this was a Filtered Cost
>> >> Map service?
>> >>
>> >> My inclination is to reject an POST request, even if there is no
>> >>content.
>> >> Normally I prefer to forgive obvious errors, but unless all servers
>> have
>> >> the same level of forgiveness, error-tolerant servers will be seen as
>> >> "correct", while other servers will be seen as "incorrect".
>> >>
>> >> What does the group think?
>> >
>> >My view is that the behaviour is server implementation specific and that
>> >clients must not rely on a particular response unless they have further
>> >information to suggest otherwise.
>> >
>> >I don¹t like the idea of mandating returning an error as I¹d like to
>> leave
>> >the door open to allowing POST later on, e.g. as a possible means to
>> >update
>> >the map.
>> >
>> >Ben
>> >
>>
>>
>> _______________________________________________
>> alto mailing list
>> [email protected]
>> https://www.ietf.org/mailman/listinfo/alto
>>
>
>
>
> --
> --
>  =====================================
> | Y. Richard Yang <[email protected]>   |
> | Professor of Computer Science       |
> | http://www.cs.yale.edu/~yry/        |
>  =====================================
>
>
_______________________________________________
alto mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/alto

Reply via email to