[PATCH 2 of 2] server: support absolute urls (issue4877)

Yuya Nishihara yuya at tcha.org
Sat Oct 3 23:05:04 CDT 2015


On Fri, 02 Oct 2015 15:19:08 -0500, timeless at mozdev.org wrote:
> # HG changeset patch
> # User timeless at mozdev.org
> # Date 1443813482 14400
> #      Fri Oct 02 15:18:02 2015 -0400
> # Node ID 3afa079854db8653131291e10db34cf3bc440e35
> # Parent  8bd5471f48ec17944c641e3b7fbb8a2d9a8f1865
> server: support absolute urls (issue4877)
> 
> rfc2616 sec 5.1.2 says they should work;
> tests on OS X 10.6 / Python 2.6 fail because
> hg+tinyproxy generate these urls.
> 
> curl with tinyproxy:
> "GET /?cmd=capabilities HTTP/1.1" 200 -
> hg with tinyproxy:
> "GET https://localhost:.../?cmd=capabilities HTTP/1.1" 404 -
> 
> diff --git a/mercurial/hgweb/server.py b/mercurial/hgweb/server.py
> --- a/mercurial/hgweb/server.py
> +++ b/mercurial/hgweb/server.py
> @@ -7,6 +7,7 @@
>  # GNU General Public License version 2 or any later version.
>  
>  import os, sys, errno, urllib, BaseHTTPServer, socket, SocketServer, traceback
> +from urlparse import urlparse
>  from mercurial import util, error
>  from mercurial.hgweb import common
>  from mercurial.i18n import _
> @@ -90,9 +91,26 @@
>          self.do_POST()
>  
>      def do_hgweb(self):
> +        env = {}
> +        parsed = urlparse(self.path)
> +        if parsed.scheme and parsed.netloc:
> +            # http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5.1.2
> +            # To allow for transition to absoluteURIs in all requests in
> +            # future versions of HTTP, all HTTP/1.1 servers MUST accept the
> +            # absoluteURI form in requests, even though HTTP/1.1 clients will
> +            # only generate them in requests to proxies.

Just FYI, RFC7230 also says that, so this requirement seems still valid.

https://tools.ietf.org/html/rfc7230#section-5.3.2

> +            server = parsed.netloc
> +            self.path = self.path[self.path.find(server) + len(server):]

If the absolute URI is "http://http/foo", path will be "://http/foo".


More information about the Mercurial-devel mailing list