[MERGE] Fix bug #229076 by fixing header names before sending the request.

Vincent Ladeuil v.ladeuil+lp at free.fr
Sun May 18 08:58:32 BST 2008


>>>>> "john" == John Arbash Meinel <john at arbash-meinel.com> writes:

    john> Vincent Ladeuil wrote:
    >> Hi,
    >> 
    >> Never leave a FIXME without giving detailed explanations... or
    >> you'll end up doing all the research work again :)
    >> 
    >> See patch for explanations, roughly,
    >> python2.4/2.5/httplib/urllib/urllib2 internally capitalized
    >> (User-agent) header names (or lowercase (user-agent) them, it
    >> depends) when in fact at least one server/proxy on the earth
    >> expect them to be titled (User-Agent) and abort connections
    >> otherwise. Unfortunately, it is used by www.gnome.org* ;)
    >> 
    >> It turns out python2.5 urllib2 in some recent version (didn't
    >> search which one exactly) fixed it by using title.
    >> 
    >> Unfortunately it did it in a function I had to override to handle
    >> persistent connections (among other things).
    >> 
    >> Anyway, thanks for reading until here, I'm just being a bit
    >> verbose to respect my introduction ;-)
    >> 
    >> Vincent
    >> 
    >> *: The bug is fixed, but I'm curious as a cat, so I'd like to
    >> know what is being used there, any pointers greatly appreciated.
    >> 
    >> 
    john> === modified file 'bzrlib/transport/http/_urllib2_wrappers.py'
    john> --- bzrlib/transport/http/_urllib2_wrappers.py	2008-04-24 07:22:53 +0000
    john> +++ bzrlib/transport/http/_urllib2_wrappers.py	2008-05-17 17:53:47 +0000
    john> @@ -30,6 +30,10 @@

    john> ~ And a custom Request class that lets us track redirections, and
    john> ~ handle authentication schemes.
    john> +
    john> +For coherency with python libraries, we use capitalized header names throughout
    john> +the code, even if the header names will be titled just before sending the
    john> +request (see AbstractHTTPHandler.do_open).
    john> ~ """

    john> ~ DEBUG = 0
    john> @@ -407,10 +411,6 @@
    john> ~     _default_headers = {'Pragma': 'no-cache',
    john> ~                         'Cache-control': 'max-age=0',
    john> ~                         'Connection': 'Keep-Alive',
    john> -                        # FIXME: Spell it User-*A*gent once we
    john> -                        # know how to properly avoid bogus
    john> -                        # urllib2 using capitalize() for headers
    john> -                        # instead of title(sp?).
    john> ~                         'User-agent': 'bzr/%s (urllib)' % bzrlib_version,
    john> ~                         'Accept': '*/*',
    john> ~                         }

    john> ^- You added the comment, but I see "Cache-control" rather than "Cache-Control"
    john> and still have "User-Agent".

See above "For coherency with python libraries, we use
capitalized header names".

If I use 'User-Agent' (titled) here, the request will contain
'User-Agent: bzr-blah-blah' and 'User-agent: python-blah-blah'
(capitalized) because the internals checks are done with
capitalized or lower cased headers names.

Yes, this is messy.

No I don't intend to get rid of both urllib2 and
_urllib2_wrappers and provide an httplib2 implementation to fix
this bug ;-)

But yes, the more work-arounds I implement the more I'm tempted
to do so...

    john> Otherwise

    john> BB:approve

Thanks.

    john> I'm also curious why gnome is being that strict,

Me too, martin said in the bug report it will contact mneptok, I
hope he can tell us.

I think this is a bug on their side that is worth fixing. But
without knowing what software is causing it, it's hard to report
such a bug.

    john> I don't remember the spec being that strict.

It isn't. As Robert pointed out the spec says they are
case-insensitive.

        Vincent



More information about the bazaar mailing list