[PATCH] do not replace the request header names with lower case
Mads Kiilerich
mads at kiilerich.com
Fri May 23 09:34:41 CDT 2014
> I see your point.
mercurial-devel is a mailing list. nabble is terrible and very
unofficial frontend for posting to it. 99% of the people posting through
it violate the mailing list etiquette, for instance by not quoting
properly. Nabble will probably also mangle some of the patches you send.
We recommend using the patchbomb extension.
> Since in the comment it says it is a reimplementation of
> HTTPConnection.request() (respectifly HTTPConnection._send_request()( I
> looked into that method and created a n alternative based on _send_request.
> What do you think about it?
The implementation here is better but I still don't buy it as a
workaround for bugs in other systems. There could be other reasons to
take it, though.
> BTW The web server where I struggle with this is github.
> I try to make the hg-git plugin work with github via https
Do you have a link the issue you have filed at github? I assume they in
general are clueful and wants to be standard compliant and will fix the
issue ASAP. We should assume it will be fixed before this code could be
released.
On 05/23/2014 12:57 PM, domruf wrote:
> # HG changeset patch
> # User domruf <dominikruf at gmail.com>
> # Date 1400792192 -7200
> # Thu May 22 22:56:32 2014 +0200
> # Branch stable
> # Node ID 023ef1daa66809071a1d2261bb548404e7560368
> # Parent 54d7657d7d1e6a62315eea53f4498657e766bb60
> do not replace the request header names with lower case
See http://mercurial.selenic.com/wiki/ContributingChanges point 1.1 .
The topic could be "http" or "keepalive".
> If a webserver expects a header in a certain case the request might fail.
> i.e. if a (not so well writen) authentication module only accepts
> "Authorization" and fails with "authorization"
It seems like you some words.
If github is the reason you want to make the change, then you should
mention it here. (But I don't think you should make the change for that
reason and it is thus not relevant.)
I would like the patch if you described it as something like:
The code lowercased all header names that passed through it. HTTP
headers are case insensitive so it was thus totally valid. But there is
also no reason to change it unless we have to ... and it turns out that
there is no reason to do that. Preserving the casing can for instance
make debugging simpler. It might also make a difference for other buggy
systems.
> diff -r 54d7657d7d1e -r 023ef1daa668 mercurial/keepalive.py
> --- a/mercurial/keepalive.py Mon May 05 16:54:15 2014 +0200
> +++ b/mercurial/keepalive.py Thu May 22 22:56:32 2014 +0200
> @@ -329,19 +329,19 @@
> if sys.version_info >= (2, 4):
> headers.update(req.unredirected_hdrs)
> headers.update(self.parent.addheaders)
> - headers = dict((n.lower(), v) for n, v in headers.items())
> + headersnames = dict((n.lower(), v) for n, v in headers.items())
You do not use the values of the dict so a set would be more
appropriate. (I would have a slight preference for a name like
headernames or headerslow.)
> skipheaders = {}
> for n in ('host', 'accept-encoding'):
> - if n in headers:
> + if n in headersnames:
> skipheaders['skip_' + n.replace('-', '_')] = 1
> try:
> if req.has_data():
> data = req.get_data()
> h.putrequest('POST', req.get_selector(), **skipheaders)
> - if 'content-type' not in headers:
> + if 'content-type' not in headersnames:
> h.putheader('Content-type',
> 'application/x-www-form-urlencoded')
> - if 'content-length' not in headers:
> + if 'content-length' not in headersnames:
> h.putheader('Content-length', '%d' % len(data))
> else:
> h.putrequest('GET', req.get_selector(), **skipheaders)
/Mads
More information about the Mercurial-devel
mailing list