diff options
author | Jeremy Hylton <jeremy@alum.mit.edu> | 2002-11-13 17:27:43 +0000 |
---|---|---|
committer | Jeremy Hylton <jeremy@alum.mit.edu> | 2002-11-13 17:27:43 +0000 |
commit | c31925301739b9f211393753e3153a00f6368c0d (patch) | |
tree | 9121c4b884f5a7c431020c9e9ad447af2409f741 /Lib/httplib.py | |
parent | 2c892dbbc2871f2f649b1120fffb9ea534c221e2 (diff) | |
download | cpython-c31925301739b9f211393753e3153a00f6368c0d.tar.gz |
Fix SF bug #637789: Handle Proxy-Connection header.
Also, remove unused local variable noted by pychecker.
Diffstat (limited to 'Lib/httplib.py')
-rw-r--r-- | Lib/httplib.py | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/Lib/httplib.py b/Lib/httplib.py index 077fb255dc..0dbd6e49b8 100644 --- a/Lib/httplib.py +++ b/Lib/httplib.py @@ -169,7 +169,6 @@ class HTTPMessage(mimetools.Message): # for http and/or for repeating headers # It's a continuation line. list.append(line) - x = self.dict[headerseen] + "\n " + line.strip() self.addcontinue(headerseen, line.strip()) continue elif self.iscomment(line): @@ -311,20 +310,7 @@ class HTTPResponse: self.chunked = 0 # will the connection close at the end of the response? - conn = self.msg.getheader('connection') - if conn: - conn = conn.lower() - # a "Connection: close" will always close the connection. if we - # don't see that and this is not HTTP/1.1, then the connection will - # close unless we see a Keep-Alive header. - self.will_close = conn.find('close') != -1 or \ - ( self.version != 11 and \ - not self.msg.getheader('keep-alive') ) - else: - # for HTTP/1.1, the connection will always remain open - # otherwise, it will remain open IFF we see a Keep-Alive header - self.will_close = self.version != 11 and \ - not self.msg.getheader('keep-alive') + self.will_close = self._check_close() # do we have a Content-Length? # NOTE: RFC 2616, S4.4, #3 says we ignore this if tr_enc is "chunked" @@ -351,6 +337,30 @@ class HTTPResponse: self.length is None: self.will_close = 1 + def _check_close(self): + if self.version == 11: + # An HTTP/1.1 proxy is assumed to stay open unless + # explicitly closed. + conn = self.msg.getheader('connection') + if conn and conn.lower().find("close") >= 0: + return True + return False + + # An HTTP/1.0 response with a Connection header is probably + # the result of a confused proxy. Ignore it. + + # For older HTTP, Keep-Alive indiciates persistent connection. + if self.msg.getheader('keep-alive'): + return False + + # Proxy-Connection is a netscape hack. + pconn = self.msg.getheader('proxy-connection') + if pconn and pconn.lower().find("keep-alive") >= 0: + return False + + # otherwise, assume it will close + return True + def close(self): if self.fp: self.fp.close() |