Maciej Stachowiak wrote:
This is a known issue, see
<http://www.w3.org/Protocols/HTTP/1.1/rfc2616bis/issues/#i19>.
It seems that pending resolution of this issue, it's inappropriate to
require XMLHttpRequest implementations to sometimes send requests that
may be in violation of the RFC.
It's also inappropriate to require implementations not to send the body
when HTTP allows it. So how about staying silent about it?
I don't see why that would be a violation. As far as I can tell, some
people consider it an extension point.
9.1.1 "In particular, the convention has been established that the GET
and HEAD methods SHOULD NOT have the significance of taking an action
other than retrieval."
Yes. I wasn't suggesting otherwise.
9.3 "The GET method means retrieve whatever information (in the form of
an entity) is identified by the Request-URI."
Seems to me that processing a GET request should not have any action on
the server other than retrieval, and retrieves an entity identified by
the Request-URI (and not, for instance, by any possible entity body).
Also, it seems that if a GET response that varies based on entity-body
is allowed at all, it would have to be specified as uncacheable or it
would break integrity of caches.
Yes, but I don't see why that would be a problem.
It's not clear at all, IMHO, otherwise we probably wouldn't discuss it.
All right, I will admit that this is unclear (along with many other
details of the HTTP protocol).
Ah, consensus :-). Yes, there are many other things in the spec that
should be improved, and judging from the people who attended last week's
WG meeting, there's quite a lot of interest across various companies to
get this done.
On the other hand, the inability of a library/client/HTTP stack to
pass a body in GET requests is a clear sign that it special-cases
message passing behavior based on the request method, which would be a
very bad design.
That doesn't seem right to me. HTTP client special-casing based on
request method is required or recommended by the RFC in some cases:
- For TRACE, it is indisputably mandatory for an http client library to
special-case the method (since it MUST NOT send an entity-body).
Hm, no. It means that the client must not send the body, where the
client consists of a client library and code driving it. It's not clear
that it's the library's role to enforce this.
- For GET, HEAD and DELETE, it is unclear based on the current RFC
whether the same special-casing is mandatory, forbidden or optional.
No special casing is needed anyway, see above.
- Responses to OPTIONS, PUT and DELETE are not cacheable, apparently
notwithstanding response headers.
We're now talking about caching, and I totally agree that more
clarifications are required here (I was referring to the actual message
transmission in my reply).
- Responses to POST are not cacheable unless explicitly specified by
Cache-Control or Expires response headers.
- Issuing a PUT, POST or DELETE should invalidate cached entities for
the corresponding Request-URI.
...see above...
- For GET, some special semantics are defined for conditional and range
headers.
Are you saying that handling of conditionals is different for GET? Pointer?
...
The HTTP spec defines the message format uniformly across methods
(with the known exception HEAD), and thus I'd recommend to write
implementations accordingly.
Thanks for the suggestion, however I'm not sure this advice is
applicable. And in any case it comes too late to affect the structure of
already existing implementations, so does not have much effect on the
pragmatic landscape.
It should affect specs that are based on HTTP, such as XHR.
So please let the HTTPbis WG worry about how to resolve this issue;
and do not step into areas not owned by this WG.
The relevant input to this working group as far as HTTP is concerned is
the appropriate RFCs. HTTPbis WG members may have useful information on
the content of current or future RFCs, but it is certainly within this
WGs purview to read and interpret the relevant specifications for
ourselves.
Sure.
What I was trying to say (and apparently failed to) was that if *this*
WG feels there's a problem in RFC2616, the right thing to do is to raise
this issue over on the HTTPbis working group, and let *that* working
group discuss it (which, btw, is an IETF WG and thus completely free to
participate).
BR, Julian