[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