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 19:58:41 UTC

[49/50] [abbrv] httpcomponents-core git commit: Fixed delineation of 200 status message in response to CONNECT method

Fixed delineation of 200 status message in response to CONNECT method

git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpcore/trunk@1794176 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/e1c42bf3
Tree: http://git-wip-us.apache.org/repos/asf/httpcomponents-core/tree/e1c42bf3
Diff: http://git-wip-us.apache.org/repos/asf/httpcomponents-core/diff/e1c42bf3

Branch: refs/heads/trunk
Commit: e1c42bf35bb9e6291d212648876c926002525211
Parents: 96b9e84
Author: Oleg Kalnichevski <ol...@apache.org>
Authored: Sat May 6 19:33:22 2017 +0000
Committer: Oleg Kalnichevski <ol...@apache.org>
Committed: Sat May 6 19:33:22 2017 +0000

----------------------------------------------------------------------
 .../http/impl/DefaultConnectionReuseStrategy.java | 16 ++++------------
 .../http/impl/nio/ClientHttp1StreamDuplexer.java  |  9 ++-------
 .../http/impl/nio/ClientHttp1StreamHandler.java   |  4 ++--
 .../hc/core5/http/message/MessageSupport.java     | 18 ++++++++++++++++++
 4 files changed, 26 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/httpcomponents-core/blob/e1c42bf3/httpcore5/src/main/java/org/apache/hc/core5/http/impl/DefaultConnectionReuseStrategy.java
----------------------------------------------------------------------
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/DefaultConnectionReuseStrategy.java b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/DefaultConnectionReuseStrategy.java
index 8aaa4f5..27c2fe2 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/DefaultConnectionReuseStrategy.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/DefaultConnectionReuseStrategy.java
@@ -37,10 +37,10 @@ import org.apache.hc.core5.http.HeaderElements;
 import org.apache.hc.core5.http.HttpHeaders;
 import org.apache.hc.core5.http.HttpRequest;
 import org.apache.hc.core5.http.HttpResponse;
-import org.apache.hc.core5.http.HttpStatus;
 import org.apache.hc.core5.http.HttpVersion;
 import org.apache.hc.core5.http.ProtocolVersion;
 import org.apache.hc.core5.http.message.BasicTokenIterator;
+import org.apache.hc.core5.http.message.MessageSupport;
 import org.apache.hc.core5.http.protocol.HttpContext;
 import org.apache.hc.core5.util.Args;
 
@@ -97,7 +97,9 @@ public class DefaultConnectionReuseStrategy implements ConnectionReuseStrategy {
                 return false;
             }
         } else {
-            if (canResponseHaveBody(request, response) && response.containsHeaders(HttpHeaders.CONTENT_LENGTH) != 1) {
+            final String method = request != null ? request.getMethod() : null;
+            if (MessageSupport.canResponseHaveBody(method, response)
+                    && response.containsHeaders(HttpHeaders.CONTENT_LENGTH) != 1) {
                 return false;
             }
         }
@@ -134,14 +136,4 @@ public class DefaultConnectionReuseStrategy implements ConnectionReuseStrategy {
         return ver.greaterEquals(HttpVersion.HTTP_1_1);
     }
 
-    private boolean canResponseHaveBody(final HttpRequest request, final HttpResponse response) {
-        if (request != null && request.getMethod().equalsIgnoreCase("HEAD")) {
-            return false;
-        }
-        final int status = response.getCode();
-        return status >= HttpStatus.SC_SUCCESS
-            && status != HttpStatus.SC_NO_CONTENT
-            && status != HttpStatus.SC_NOT_MODIFIED;
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/httpcomponents-core/blob/e1c42bf3/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ClientHttp1StreamDuplexer.java
----------------------------------------------------------------------
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ClientHttp1StreamDuplexer.java b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ClientHttp1StreamDuplexer.java
index 32100a2..f5a55fc 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ClientHttp1StreamDuplexer.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ClientHttp1StreamDuplexer.java
@@ -42,7 +42,6 @@ import org.apache.hc.core5.http.Header;
 import org.apache.hc.core5.http.HttpException;
 import org.apache.hc.core5.http.HttpRequest;
 import org.apache.hc.core5.http.HttpResponse;
-import org.apache.hc.core5.http.HttpStatus;
 import org.apache.hc.core5.http.LengthRequiredException;
 import org.apache.hc.core5.http.config.CharCodingConfig;
 import org.apache.hc.core5.http.config.H1Config;
@@ -52,6 +51,7 @@ import org.apache.hc.core5.http.impl.ConnectionListener;
 import org.apache.hc.core5.http.impl.DefaultConnectionReuseStrategy;
 import org.apache.hc.core5.http.impl.DefaultContentLengthStrategy;
 import org.apache.hc.core5.http.impl.Http1StreamListener;
+import org.apache.hc.core5.http.message.MessageSupport;
 import org.apache.hc.core5.http.nio.AsyncClientExchangeHandler;
 import org.apache.hc.core5.http.nio.CapacityChannel;
 import org.apache.hc.core5.http.nio.ContentDecoder;
@@ -268,12 +268,7 @@ public class ClientHttp1StreamDuplexer extends AbstractHttp1StreamDuplexer<HttpR
         if (incoming == null) {
             throw new HttpException("Unexpected response");
         }
-
-        if (incoming.isHeadRequest()) {
-            return null;
-        }
-        final int status = response.getCode();
-        if (status < HttpStatus.SC_SUCCESS || status == HttpStatus.SC_NO_CONTENT || status == HttpStatus.SC_NOT_MODIFIED) {
+        if (!MessageSupport.canResponseHaveBody(incoming.getRequestMethod(), response)) {
             return null;
         }
         final long len = incomingContentStrategy.determineLength(response);

http://git-wip-us.apache.org/repos/asf/httpcomponents-core/blob/e1c42bf3/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ClientHttp1StreamHandler.java
----------------------------------------------------------------------
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ClientHttp1StreamHandler.java b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ClientHttp1StreamHandler.java
index b5eb490..c5394a2 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ClientHttp1StreamHandler.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ClientHttp1StreamHandler.java
@@ -125,8 +125,8 @@ class ClientHttp1StreamHandler implements ResourceHolder {
         return requestState == MessageState.COMPLETE && responseState == MessageState.COMPLETE;
     }
 
-    boolean isHeadRequest() {
-        return committedRequest != null && "HEAD".equalsIgnoreCase(committedRequest.getMethod());
+    String getRequestMethod() {
+        return committedRequest != null ? committedRequest.getMethod() : null;
     }
 
     boolean isOutputReady() {

http://git-wip-us.apache.org/repos/asf/httpcomponents-core/blob/e1c42bf3/httpcore5/src/main/java/org/apache/hc/core5/http/message/MessageSupport.java
----------------------------------------------------------------------
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/message/MessageSupport.java b/httpcore5/src/main/java/org/apache/hc/core5/http/message/MessageSupport.java
index 2d24b26..91226bd 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/message/MessageSupport.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/message/MessageSupport.java
@@ -39,6 +39,8 @@ import org.apache.hc.core5.http.Header;
 import org.apache.hc.core5.http.HeaderElement;
 import org.apache.hc.core5.http.HttpHeaders;
 import org.apache.hc.core5.http.HttpMessage;
+import org.apache.hc.core5.http.HttpResponse;
+import org.apache.hc.core5.http.HttpStatus;
 import org.apache.hc.core5.http.MessageHeaders;
 import org.apache.hc.core5.util.Args;
 import org.apache.hc.core5.util.CharArrayBuffer;
@@ -169,4 +171,20 @@ public class MessageSupport {
         return BasicHeaderValueParser.INSTANCE.parseElements(value, cursor);
     }
 
+    /**
+     * @since  5.0
+     */
+    public static boolean canResponseHaveBody(final String method, final HttpResponse response) {
+        if ("HEAD".equalsIgnoreCase(method)) {
+            return false;
+        }
+        final int status = response.getCode();
+        if ("CONNECT".equalsIgnoreCase(method) && status == HttpStatus.SC_OK) {
+            return false;
+        }
+        return status >= HttpStatus.SC_SUCCESS
+                && status != HttpStatus.SC_NO_CONTENT
+                && status != HttpStatus.SC_NOT_MODIFIED;
+    }
+
 }