mirror of
https://github.com/python/cpython.git
synced 2025-11-01 10:45:30 +00:00
Fixes Issue 1401. When redirected, a possible POST get converted
to GET, so it loses its payload. So, it also must lose the headers related to the payload (if it has no content any more, it shouldn't indicate content length and type).
This commit is contained in:
parent
b4ee4a16f4
commit
86371d61b7
2 changed files with 13 additions and 1 deletions
|
|
@ -822,6 +822,8 @@ class HandlerTests(unittest.TestCase):
|
|||
method = getattr(h, "http_error_%s" % code)
|
||||
req = Request(from_url, data)
|
||||
req.add_header("Nonsense", "viking=withhold")
|
||||
if data is not None:
|
||||
req.add_header("Content-Length", str(len(data)))
|
||||
req.add_unredirected_header("Spam", "spam")
|
||||
try:
|
||||
method(req, MockFile(), code, "Blah",
|
||||
|
|
@ -834,6 +836,13 @@ class HandlerTests(unittest.TestCase):
|
|||
self.assertEqual(o.req.get_method(), "GET")
|
||||
except AttributeError:
|
||||
self.assert_(not o.req.has_data())
|
||||
|
||||
# now it's a GET, there should not be headers regarding content
|
||||
# (possibly dragged from before being a POST)
|
||||
headers = [x.lower() for x in o.req.headers]
|
||||
self.assertTrue("content-length" not in headers)
|
||||
self.assertTrue("content-type" not in headers)
|
||||
|
||||
self.assertEqual(o.req.headers["Nonsense"],
|
||||
"viking=withhold")
|
||||
self.assert_("Spam" not in o.req.headers)
|
||||
|
|
|
|||
|
|
@ -534,8 +534,11 @@ class HTTPRedirectHandler(BaseHandler):
|
|||
# do the same.
|
||||
# be conciliant with URIs containing a space
|
||||
newurl = newurl.replace(' ', '%20')
|
||||
newheaders = dict((k,v) for k,v in req.headers.items()
|
||||
if k.lower() not in ("content-length", "content-type")
|
||||
)
|
||||
return Request(newurl,
|
||||
headers=req.headers,
|
||||
headers=newheaders,
|
||||
origin_req_host=req.get_origin_req_host(),
|
||||
unverifiable=True)
|
||||
else:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue