From 7d1f2ac7691c2d30eaf73ace2176ca1383b5f72b Mon Sep 17 00:00:00 2001
From: Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>
Date: Thu, 20 Nov 2014 21:44:00 +0900
Subject: [PATCH] http: Disable pipelining for HTTP/2 and upgraded connections

This commit disables pipelining for HTTP/2 or upgraded connections.  For
HTTP/2, we do not support multiplexing.  In general, requests cannot be
pipelined in an upgraded connection, since it is now different protocol.
---
 lib/http.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/lib/http.c b/lib/http.c
index 76af6f702a..2e9fd7d716 100644
--- a/lib/http.c
+++ b/lib/http.c
@@ -3293,6 +3293,16 @@ CURLcode Curl_http_readwrite_headers(struct SessionHandle *data,
           infof(data, "HTTP 1.0, assume close after body\n");
           connclose(conn, "HTTP/1.0 close after body");
         }
+        else if(conn->httpversion == 20 ||
+                (k->upgr101 == UPGR101_REQUESTED && k->httpcode == 101)) {
+          /* Don't enable pipelining for HTTP/2 or upgraded connection. For
+             HTTP/2, we do not support multiplexing. In general, requests
+             cannot be pipelined in upgraded connection, since it is now
+             different protocol. */
+          DEBUGF(infof(data,
+                       "HTTP 2 or upgraded connection do not support "
+                       "pipelining for now\n"));
+        }
         else if(conn->httpversion >= 11 &&
                 !conn->bits.close) {
           struct connectbundle *cb_ptr;
-- 
GitLab