You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2017/05/09 20:03:54 UTC

[25/35] httpcomponents-core git commit: HTTPCORE-281: ResponseConnControl protocol interceptor does not correctly populate connection persistence control headers when sending a HTTP/1.1 response message in response to a HTTP/1.0 request message (merged f

HTTPCORE-281: ResponseConnControl protocol interceptor does not correctly populate connection persistence control headers when sending a HTTP/1.1 response message in response to a HTTP/1.0 request message (merged from trunk)
Contributed by William R. Speirs <bill.speirs at gmail.com>

git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpcore/branches/4.1.x@1204996 13f79535-47bb-0310-9956-ffa450edef68


Project: http://git-wip-us.apache.org/repos/asf/httpcomponents-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/httpcomponents-core/commit/24802042
Tree: http://git-wip-us.apache.org/repos/asf/httpcomponents-core/tree/24802042
Diff: http://git-wip-us.apache.org/repos/asf/httpcomponents-core/diff/24802042

Branch: refs/heads/4.1.x
Commit: 24802042ed42554b1860977317a0f79e30626f5a
Parents: a32882c
Author: Oleg Kalnichevski <ol...@apache.org>
Authored: Tue Nov 22 13:55:49 2011 +0000
Committer: Oleg Kalnichevski <ol...@apache.org>
Committed: Tue Nov 22 13:55:49 2011 +0000

----------------------------------------------------------------------
 RELEASE_NOTES.txt                                    |  5 +++++
 .../apache/http/protocol/ResponseConnControl.java    |  4 +++-
 .../http/protocol/TestStandardInterceptors.java      | 15 +++++++++++++++
 3 files changed, 23 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/httpcomponents-core/blob/24802042/RELEASE_NOTES.txt
----------------------------------------------------------------------
diff --git a/RELEASE_NOTES.txt b/RELEASE_NOTES.txt
index 38bad2b..a5148fb 100644
--- a/RELEASE_NOTES.txt
+++ b/RELEASE_NOTES.txt
@@ -1,6 +1,11 @@
 Changes since 4.1.3
 -------------------
 
+* [HTTPCORE-281] ResponseConnControl protocol interceptor does not correctly populate connection
+  persistence control headers when sending a HTTP/1.1 response message in response to a HTTP/1.0 
+  request message.
+  Contributed by William R. Speirs <bill.speirs at gmail.com>
+
 * [HTTPCORE-282] The default value of the internal event mask of newly created non-blocking I/O 
   is not correctly initialized, which causes the READ interest bit to get cleared in the interest 
   op queuing mode unless the event mask is explicitly reset.

http://git-wip-us.apache.org/repos/asf/httpcomponents-core/blob/24802042/httpcore/src/main/java/org/apache/http/protocol/ResponseConnControl.java
----------------------------------------------------------------------
diff --git a/httpcore/src/main/java/org/apache/http/protocol/ResponseConnControl.java b/httpcore/src/main/java/org/apache/http/protocol/ResponseConnControl.java
index 7541a09..ad738a9 100644
--- a/httpcore/src/main/java/org/apache/http/protocol/ResponseConnControl.java
+++ b/httpcore/src/main/java/org/apache/http/protocol/ResponseConnControl.java
@@ -84,13 +84,15 @@ public class ResponseConnControl implements HttpResponseInterceptor {
                 return;
             }
         }
-        // Drop connection if requested by the client
+        // Drop connection if requested by the client or request was <= 1.0
         HttpRequest request = (HttpRequest)
             context.getAttribute(ExecutionContext.HTTP_REQUEST);
         if (request != null) {
             Header header = request.getFirstHeader(HTTP.CONN_DIRECTIVE);
             if (header != null) {
                 response.setHeader(HTTP.CONN_DIRECTIVE, header.getValue());
+            } else if (request.getProtocolVersion().lessEquals(HttpVersion.HTTP_1_0)) {
+                response.setHeader(HTTP.CONN_DIRECTIVE, HTTP.CONN_CLOSE);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/httpcomponents-core/blob/24802042/httpcore/src/test/java/org/apache/http/protocol/TestStandardInterceptors.java
----------------------------------------------------------------------
diff --git a/httpcore/src/test/java/org/apache/http/protocol/TestStandardInterceptors.java b/httpcore/src/test/java/org/apache/http/protocol/TestStandardInterceptors.java
index b35382b..4c5412f 100644
--- a/httpcore/src/test/java/org/apache/http/protocol/TestStandardInterceptors.java
+++ b/httpcore/src/test/java/org/apache/http/protocol/TestStandardInterceptors.java
@@ -543,6 +543,21 @@ public class TestStandardInterceptors extends TestCase {
         assertNull(header);
     }
 
+    public void testResponseConnControl10Client11Response() throws Exception {
+        HttpContext context = new BasicHttpContext(null);
+        BasicHttpRequest request = new BasicHttpRequest("GET", "/", HttpVersion.HTTP_1_0);
+        context.setAttribute(ExecutionContext.HTTP_REQUEST, request);
+
+        HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK");
+        StringEntity entity = new StringEntity("whatever");
+        response.setEntity(entity);
+        ResponseConnControl interceptor = new ResponseConnControl();
+        interceptor.process(response, context);
+        Header header = response.getFirstHeader(HTTP.CONN_DIRECTIVE);
+        assertNotNull(header);
+        assertEquals(HTTP.CONN_CLOSE, header.getValue());
+    }
+
     public void testResponseConnControlStatusCode() throws Exception {
         HttpContext context = new BasicHttpContext(null);
         BasicHttpRequest request = new BasicHttpRequest("GET", "/");