]> granicus.if.org Git - curl/commitdiff
http: Ignore HTTP/2 prior knowledge setting for HTTP proxies
authorJay Satiro <raysatiro@yahoo.com>
Wed, 8 May 2019 07:39:53 +0000 (03:39 -0400)
committerJay Satiro <raysatiro@yahoo.com>
Thu, 9 May 2019 02:50:41 +0000 (22:50 -0400)
- Do not switch to HTTP/2 for an HTTP proxy that is not tunnelling to
  the destination host.

We already do something similar for HTTPS proxies by not sending h2. [1]

Prior to this change setting CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE would
incorrectly use HTTP/2 to talk to the proxy, which is not something we
support (yet?). Also it's debatable whether or not that setting should
apply to HTTP/2 proxies.

[1]: https://github.com/curl/curl/commit/17c5d05

Bug: https://github.com/curl/curl/issues/3570
Bug: https://github.com/curl/curl/issues/3832

Closes https://github.com/curl/curl/pull/3853

lib/http.c

index 76a504b5a755ee18afbb22b38b43c2415d3334a3..b182844ff3827108690396bed8db8d9f257d1da4 100644 (file)
@@ -1970,6 +1970,13 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
 #ifdef USE_NGHTTP2
       if(conn->data->set.httpversion ==
          CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE) {
+        if(conn->bits.httpproxy && !conn->bits.tunnel_proxy) {
+          /* We don't support HTTP/2 proxies yet. Also it's debatable whether
+             or not this setting should apply to HTTP/2 proxies. */
+          infof(data, "Ignoring HTTP/2 prior knowledge due to proxy\n");
+          break;
+        }
+
         DEBUGF(infof(data, "HTTP/2 over clean TCP\n"));
         conn->httpversion = 20;