aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--netlib/http.py17
-rw-r--r--test/test_http.py22
2 files changed, 9 insertions, 30 deletions
diff --git a/netlib/http.py b/netlib/http.py
index f1a2bfb5..7060b688 100644
--- a/netlib/http.py
+++ b/netlib/http.py
@@ -283,32 +283,23 @@ def parse_init_http(line):
return method, url, httpversion
-def request_connection_close(httpversion, headers):
+def connection_close(httpversion, headers):
"""
- Checks the request to see if the client connection should be closed.
+ Checks the message to see if the client connection should be closed according to RFC 2616 Section 8.1
"""
+ # At first, check if we have an explicit Connection header.
if "connection" in headers:
toks = get_header_tokens(headers, "connection")
if "close" in toks:
return True
elif "keep-alive" in toks:
return False
- # HTTP 1.1 connections are assumed to be persistent
+ # If we don't have a Connection header, HTTP 1.1 connections are assumed to be persistent
if httpversion == (1, 1):
return False
return True
-def response_connection_close(httpversion, headers):
- """
- Checks the response to see if the client connection should be closed.
- """
- if request_connection_close(httpversion, headers):
- return True
- elif (not has_chunked_encoding(headers)) and "content-length" in headers:
- return False
- return True
-
def read_http_body_request(rfile, wfile, headers, httpversion, limit):
"""
diff --git a/test/test_http.py b/test/test_http.py
index 62d0c3dc..4d89bf24 100644
--- a/test/test_http.py
+++ b/test/test_http.py
@@ -38,28 +38,16 @@ def test_read_chunked():
tutils.raises("too large", http.read_chunked, 500, s, 2)
-def test_request_connection_close():
+def test_connection_close():
h = odict.ODictCaseless()
- assert http.request_connection_close((1, 0), h)
- assert not http.request_connection_close((1, 1), h)
+ assert http.connection_close((1, 0), h)
+ assert not http.connection_close((1, 1), h)
h["connection"] = ["keep-alive"]
- assert not http.request_connection_close((1, 1), h)
+ assert not http.connection_close((1, 1), h)
h["connection"] = ["close"]
- assert http.request_connection_close((1, 1), h)
-
-
-def test_response_connection_close():
- h = odict.ODictCaseless()
- assert http.response_connection_close((1, 1), h)
-
- h["content-length"] = [10]
- assert not http.response_connection_close((1, 1), h)
-
- h["connection"] = ["close"]
- assert http.response_connection_close((1, 1), h)
-
+ assert http.connection_close((1, 1), h)
def test_read_http_body_response():
h = odict.ODictCaseless()