- From: cowwoc <cowwoc@bbs.darktech.org>
- Date: Thu, 04 Jul 2013 10:00:26 -0400
- To: Mark Nottingham <mnot@mnot.net>
- CC: Martin Thomson <martin.thomson@gmail.com>, HTTP Working Group <ietf-http-wg@w3.org>
On 04/07/2013 4:22 AM, Mark Nottingham wrote:
> Hi Gili,
> <https://svn.tools.ietf.org/svn/wg/httpbis/draft-ietf-httpbis/latest/p2-semantics.html#status.3xx>
> starts:
>> The 3xx (Redirection) class of status code indicates that further action needs to be taken by the user agent in order to fulfill the request.
> So, we already say that the request isn't fulfilled when you see a 3xx.
Hi Mark,
That isn't strictly true. The language of the new specification is
a little loosy goosy.
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.4 says
the client "SHOULD" respond to HTTP 303 by issuing HTTP GET on the
returned URL.
https://svn.tools.ietf.org/svn/wg/httpbis/draft-ietf-httpbis/latest/p2-semantics.html#status.303
says the client "ought to" respond by doing the same.
First of all, "ought to" isn't as well defined as "should".
Secondly, both imply to me that issuing a subsequent HTTP GET is an
optional operation. If it's an optional operation, then I am
interpreting it as meaning that the original request may or may not be
fulfilled because from the client's point of view, its job is finished
(I am not required to issue an HTTP GET to hold up my end of the contract).
> The server, by issuing a 303, is making an assertion that there's something useful at the other end; if there isn't, it's not telling the truth, and the client will have to deal with that.
>
> Making an explicit binding between receiving the entire request and the state of a completely separate resource seems like unnecessary coupling to me; how would doing so help interop?
I guess I agree with you. I just don't like see any sort of
ambiguity in specifications I read.
I'd like the specification to explicitly state: "The request is
only guaranteed to have been processed after the client issues HTTP GET
on a returned URL and is no longer redirected using HTTP 3xx".
Obviously, you'd have to clean up the language but you get my point.
That way there is no longer any ambiguity as to the client's
responsibility (HTTP 303 will imply "MUST" instead of "SHOULD" if the
client wishes to complete the original request) and you get to keep the
flexibility you wanted on the server end.
Gili
Received on Thursday, 4 July 2013 14:01:20 UTC