diff options
author | Benjamin Peterson <benjamin@python.org> | 2014-12-26 16:56:51 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2014-12-26 16:56:51 (GMT) |
commit | fe975a234fec6fa9c88b1d90d97542398267a484 (patch) | |
tree | 01be79ca7375ecf8a69670fce02581f5ac4f63ce | |
parent | f2ad173eaf38140bd72a849f47e0427b3d941692 (diff) | |
parent | 94cb7a24298ee0a4d6a3bb6b8ae80a7729e9f788 (diff) | |
download | cpython-fe975a234fec6fa9c88b1d90d97542398267a484.zip cpython-fe975a234fec6fa9c88b1d90d97542398267a484.tar.gz cpython-fe975a234fec6fa9c88b1d90d97542398267a484.tar.bz2 |
merge 3.4 (#23112)
-rw-r--r-- | Lib/http/server.py | 8 | ||||
-rw-r--r-- | Lib/test/test_httpservers.py | 6 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
3 files changed, 15 insertions, 2 deletions
diff --git a/Lib/http/server.py b/Lib/http/server.py index 02e9cc2..ac53550 100644 --- a/Lib/http/server.py +++ b/Lib/http/server.py @@ -648,10 +648,14 @@ class SimpleHTTPRequestHandler(BaseHTTPRequestHandler): path = self.translate_path(self.path) f = None if os.path.isdir(path): - if not self.path.endswith('/'): + parts = urllib.parse.urlsplit(self.path) + if not parts.path.endswith('/'): # redirect browser - doing basically what apache does self.send_response(HTTPStatus.MOVED_PERMANENTLY) - self.send_header("Location", self.path + "/") + new_parts = (parts[0], parts[1], parts[2] + '/', + parts[3], parts[4]) + new_url = urllib.parse.urlunsplit(new_parts) + self.send_header("Location", new_url) self.end_headers() return None for index in "index.html", "index.htm": diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index 97713cd..a31db5b 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -305,6 +305,12 @@ class SimpleHTTPServerTestCase(BaseTestCase): self.check_status_and_reason(response, 200) response = self.request(self.tempdir_name) self.check_status_and_reason(response, 301) + response = self.request(self.tempdir_name + '/?hi=2') + self.check_status_and_reason(response, 200) + response = self.request(self.tempdir_name + '?hi=1') + self.check_status_and_reason(response, 301) + self.assertEqual(response.getheader("Location"), + self.tempdir_name + "/?hi=1") response = self.request('/ThisDoesNotExist') self.check_status_and_reason(response, 404) response = self.request('/' + 'ThisDoesNotExist' + '/') @@ -196,6 +196,9 @@ Core and Builtins Library ------- +- Issue #23112: Fix SimpleHTTPServer to correctly carry the query string and + fragment when it redirects to add a trailing slash. + - Issue #21793: Added http.HTTPStatus enums (i.e. HTTPStatus.OK, HTTPStatus.NOT_FOUND). Patch by Demian Brecht. |