Index: src/java/org/apache/commons/httpclient/HttpMethodBase.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java,v retrieving revision 1.152 diff -u -r1.152 HttpMethodBase.java --- src/java/org/apache/commons/httpclient/HttpMethodBase.java 13 Jun 2003 21:32:17 -0000 1.152 +++ src/java/org/apache/commons/httpclient/HttpMethodBase.java 20 Jun 2003 05:31:28 -0000 @@ -900,6 +900,10 @@ } return true; } else if (connectionHeader.getValue().equalsIgnoreCase("keep-alive")) { + if (getResponseContentLength() < 0) { + LOG.debug("Should close connection as content-length is missing."); + return true; + } if (LOG.isDebugEnabled()) { LOG.debug("Should NOT close connection in response to " + connectionHeader.toExternalForm()); Index: src/test/org/apache/commons/httpclient/TestResponseHeaders.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestResponseHeaders.java,v retrieving revision 1.7 diff -u -r1.7 TestResponseHeaders.java --- src/test/org/apache/commons/httpclient/TestResponseHeaders.java 10 Jun 2003 22:42:52 -0000 1.7 +++ src/test/org/apache/commons/httpclient/TestResponseHeaders.java 20 Jun 2003 05:31:30 -0000 @@ -153,6 +153,7 @@ "HTTP/1.1 200 OK\r\n" + "proxy-connection: close\r\n" + "proxy-connection: close\r\n" + + "Content-Length: 0\r\n" + "\r\n"; conn.addResponse(headers, ""); @@ -169,6 +170,7 @@ "HTTP/1.0 200 OK\r\n" + "proxy-connection: keep-alive\r\n" + "proxy-connection: keep-alive\r\n" + + "Content-Length: 0\r\n" + "\r\n"; conn.addResponse(headers, ""); @@ -202,6 +204,7 @@ "HTTP/1.0 200 OK\r\n" +"Connection: keep-alive\r\n" +"Connection: keep-alive\r\n" + +"Content-Length: 0\r\n" +"\r\n"; conn.addResponse(headers, ""); @@ -210,6 +213,39 @@ method.getResponseBodyAsString(); assertTrue(conn.isOpen()); + } + + public void testNoContentLength() throws Exception { + SimpleHttpConnection conn = new SimpleHttpConnection(); + String headers = + "HTTP/1.1 200 OK\r\n" + + "Connection: keep-alive\r\n" + + "\r\n"; + + conn.addResponse(headers, "12345"); + GetMethod method = new GetMethod("/"); + method.execute(new HttpState(), conn); + method.getResponseBodyAsString(); + + assertFalse(conn.isOpen()); + } + + public void testProxyNoContentLength() throws Exception { + SimpleHttpConnection conn = new SimpleHttpConnection(); + String headers = + "HTTP/1.1 200 OK\r\n" + + "proxy-connection: keep-alive\r\n" + + "\r\n"; + + conn.addResponse(headers, "12345"); + conn.setProxyHost("proxy"); + conn.setProxyPort(1); + GetMethod method = new GetMethod("/"); + method.execute(new HttpState(), conn); + method.getResponseBodyAsString(); + + boolean isOpen = conn.isOpen(); + assertFalse(isOpen); } public void testNullHeaders() throws Exception {