1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-21 23:58:49 -05:00

http: switch on "pipelining" (multiplexing) for HTTP/2 servers

... and do not blacklist any.
This commit is contained in:
Daniel Stenberg 2015-04-27 12:51:29 +02:00
parent 5fa82ca56f
commit 6e6b02f398

View File

@ -3332,13 +3332,11 @@ CURLcode Curl_http_readwrite_headers(struct SessionHandle *data,
} }
else if(conn->httpversion == 20 || else if(conn->httpversion == 20 ||
(k->upgr101 == UPGR101_REQUESTED && k->httpcode == 101)) { (k->upgr101 == UPGR101_REQUESTED && k->httpcode == 101)) {
/* Don't enable pipelining for HTTP/2 or upgraded connection. For DEBUGF(infof(data, "HTTP/2 found, allow multiplexing\n"));
HTTP/2, we do not support multiplexing. In general, requests
cannot be pipelined in upgraded connection, since it is now /* HTTP/2 cannot blacklist multiplexing since it is a core
different protocol. */ functionality of the protocol */
DEBUGF(infof(data, conn->bundle->server_supports_pipelining = TRUE;
"HTTP 2 or upgraded connection do not support "
"pipelining for now\n"));
} }
else if(conn->httpversion >= 11 && else if(conn->httpversion >= 11 &&
!conn->bits.close) { !conn->bits.close) {
@ -3432,14 +3430,17 @@ CURLcode Curl_http_readwrite_headers(struct SessionHandle *data,
} }
} }
else if(checkprefix("Server:", k->p)) { else if(checkprefix("Server:", k->p)) {
char *server_name = Curl_copy_header_value(k->p); if(conn->httpversion < 20) {
/* only do this for non-h2 servers */
char *server_name = Curl_copy_header_value(k->p);
/* Turn off pipelining if the server version is blacklisted */ /* Turn off pipelining if the server version is blacklisted */
if(conn->bundle && conn->bundle->server_supports_pipelining) { if(conn->bundle && conn->bundle->server_supports_pipelining) {
if(Curl_pipeline_server_blacklisted(data, server_name)) if(Curl_pipeline_server_blacklisted(data, server_name))
conn->bundle->server_supports_pipelining = FALSE; conn->bundle->server_supports_pipelining = FALSE;
}
free(server_name);
} }
free(server_name);
} }
else if((conn->httpversion == 10) && else if((conn->httpversion == 10) &&
conn->bits.httpproxy && conn->bits.httpproxy &&