On Apr 22, 2006, at 6:36 PM, Robin Berjon wrote:
On Apr 23, 2006, at 02:00, Maciej Stachowiak wrote:
On Apr 21, 2006, at 12:53 PM, Mark Nottingham wrote:
How about
1) always uppercase anything matching (case-insensitive) GET
POST PUT DELETE
2) everything else gets sent as-is
This sounds viable but also harder to implement than always
uppercasing and the benefits seem purely hypothetical.
It is a little bit more work but it doesn't really sound much
harder to implement to me. The benefits are, I believe, three: it
keeps existing content that works today working, it allows for
other methods to use lowercase methods, and, last but not least, it
appears to be the position most likely to garner consensus.
I don't think there is any showstopper technical flaw with Mark's
proposal, and I almost proposed something similar myself.
However, doing case-insensitive compare against a list before
deciding whether to uppercase does add some implementation complexity
and more opportunity for bugs. Even if the implementation complexity
for any given design is small, we should not just increase complexity
gratuitously. Instead we should be sure it is justified with a real
and significant use case.
So far no one has named a server on the publicly accessible web where
sending a method in arbitrary case is required, or any current or
expected future standard that uses anything but all-uppercase http
method names.
BTW I don't understand why people think losing the ability to send
lowercase or mixed-cased methods (something that is highly
unlikely to have interesting use cases) amounts to the sin of
"profiling http", but no one objected to restricting what headers
may be sent, even though that "profiles http" just as much, and in
a way that has more practical consequences.
Unless I've missed something, we have only forbidden headers that
we know of, and that we know to be problematic, most notably for
security reasons (there has been push-back on restricting for other
reasons, e.g. the encoding case). If a new HTTP extension comes
about, the people designing it will generally not have to care
about the existence and behaviour of XHR. This is fine since it
promotes independence of design.
Actually, they probably will have to consider XHR; if they add any
headers that can cause security problems when set from untrusted web
content, then their spec will have a security problem. Protocol specs
need to consider use cases.
But really, the point is not what we restricted or why. The bottom
line is, we've already crossed the "profiling http" bridge.
If on the other hand we decide to prohibit lowercase methods,
specifiers of such extensions will be required to have arcane
knowledge of XHR, of the kind only possessed by people who will
have read the spec paying great attention to detail. It's not good
for independence, it's not good for least surprise, and while small
it's still another addition to the many things that can trip people
writing specifications or creating technology. If possible, it
should thus be avoided.
Seems to be that so far, all such spec authors have successfully made
their method names all uppercase without having an XHR spec to look
at. So this problem seems more theoretical than real.
Let's face it, XMLHttpRequest only offers access to a subset of
HTTP protocol features, this is not avoidable, now let's pick that
subset based on pragmatic considerations, not theoretical purity.
I wholeheartedly agree, but the problem is that one's theoretical
purity is often someone else's pragmatism. We could try to figure
out who's right, but it would likely get quite theoretical, and
more importantly rather long :)
No, I don't accept that. You can demonstrate that something is a
pragmatic issue by showing a real-world example. You can't handwave
away the difference.
In this case, an example of a spec using non-uppercase http method
names, or of a server requiring such, would demonstrate the need for
the feature. Anne demonstrated the need to uppercase 'get' and 'post'
by showing widely deployed JS libraries depending on this behavior.
So far no one has has made a similar demonstration of the benefits of
not uppercasing 'foobar'. I welcome such research and would gladly
change my tune based on the results.
That being said, whether all methods are uppercased or only the
methods that get significant use, is not really a major issue. But
let's not just casually increase spec complexity without doing our
due diligence.
Regards,
Maciej