Kaydet (Commit) 162f081f authored tarafından Martin v. Löwis's avatar Martin v. Löwis

Patch 549151, rev4: redirect posts for 301 also. Will backport to 2.2.

üst a685f522
......@@ -257,12 +257,12 @@ actually retrieve a resource at an \file{https:} URL.
\begin{classdesc}{FancyURLopener}{...}
\class{FancyURLopener} subclasses \class{URLopener} providing default
handling for the following HTTP response codes: 301, 302, 303 and 401.
For 301, 302 and 303 response codes, the \mailheader{Location} header
is used to fetch the actual URL. For 401 response codes
(authentication required), basic HTTP authentication is performed.
For 301, 302 and 303 response codes, recursion is bounded by the value
of the \var{maxtries} attribute, which defaults 10.
handling for the following HTTP response codes: 301, 302, 303, 307 and
401. For the 30x response codes listed above, the
\mailheader{Location} header is used to fetch the actual URL. For 401
response codes (authentication required), basic HTTP authentication is
performed. For the 30x response codes, recursion is bounded by the
value of the \var{maxtries} attribute, which defaults to 10.
\note{According to the letter of \rfc{2616}, 301 and 302 responses to
POST requests must not be automatically redirected without
......
......@@ -424,8 +424,11 @@ redirect. Otherwise, raise \exception{HTTPError} if no other
if you can't but another \class{Handler} might.
\note{The default implementation of this method does not strictly
follow \rfc{2616}: it allows automatic 302 redirection of POST
requests, because essentially all HTTP clients do this.}
follow \rfc{2616}, which says that 301 and 302 responses to POST
requests must not be automatically redirected without confirmation by
the user. In reality, browsers do allow automatic redirection of
these responses, changing the POST to a GET, and the default
implementation reproduces this behaviour.}
\end{methoddesc}
......@@ -446,9 +449,14 @@ The same as \method{http_error_301()}, but called for the
\begin{methoddesc}[HTTPRedirectHandler]{http_error_303}{req,
fp, code, msg, hdrs}
The same as \method{http_error_301()}, but called for the
`see other' redirect response.
`see other' response.
\end{methoddesc}
\begin{methoddesc}[HTTPRedirectHandler]{http_error_307}{req,
fp, code, msg, hdrs}
The same as \method{http_error_301()}, but called for the
`temporary redirect' response.
\subsection{ProxyHandler Objects \label{proxy-handler}}
\begin{methoddescni}[ProxyHandler]{\var{protocol}_open}{request}
......
......@@ -431,9 +431,9 @@ class HTTPRedirectHandler(BaseHandler):
"""
m = req.get_method()
if (code in (301, 302, 303, 307) and m in ("GET", "HEAD")
or code in (302, 303) and m == "POST"):
# Strictly (according to RFC 2616), 302 in response to a
# POST MUST NOT cause a redirection without confirmation
or code in (301, 302, 303) and m == "POST"):
# Strictly (according to RFC 2616), 301 or 302 in response
# to a POST MUST NOT cause a redirection without confirmation
# from the user (of urllib2, in this case). In practice,
# essentially all clients do redirect in this case, so we
# do the same.
......@@ -480,9 +480,9 @@ class HTTPRedirectHandler(BaseHandler):
http_error_301 = http_error_303 = http_error_307 = http_error_302
inf_msg = "The HTTP server returned a redirect error that would" \
inf_msg = "The HTTP server returned a redirect error that would " \
"lead to an infinite loop.\n" \
"The last 302 error message was:\n"
"The last 30x error message was:\n"
class ProxyHandler(BaseHandler):
# Proxies must be in front
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment