Loading docs/TODO +0 −8 Original line number Original line Diff line number Diff line Loading @@ -63,7 +63,6 @@ 5.1 Better persistency for HTTP 1.0 5.1 Better persistency for HTTP 1.0 5.2 support FF3 sqlite cookie files 5.2 support FF3 sqlite cookie files 5.3 Rearrange request header order 5.3 Rearrange request header order 5.4 Use huge HTTP/2 windows 5.5 auth= in URLs 5.5 auth= in URLs 5.6 Refuse "downgrade" redirects 5.6 Refuse "downgrade" redirects 5.7 Brotli compression 5.7 Brotli compression Loading Loading @@ -528,13 +527,6 @@ This is not detailed in any FTP specification. headers use a default value so only headers that need to be moved have to be headers use a default value so only headers that need to be moved have to be specified. specified. 5.4 Use huge HTTP/2 windows We're currently using nghttp2's default window size which is terribly small (64K). This becomes a bottle neck over high bandwidth networks. We should instead make the window size to be very big (512MB?) as we really don't do much flow control anyway. 5.5 auth= in URLs 5.5 auth= in URLs Add the ability to specify the preferred authentication mechanism to use by Add the ability to specify the preferred authentication mechanism to use by Loading lib/http2.c +13 −2 Original line number Original line Diff line number Diff line Loading @@ -59,6 +59,8 @@ #define nghttp2_session_callbacks_set_error_callback(x,y) #define nghttp2_session_callbacks_set_error_callback(x,y) #endif #endif #define HTTP2_HUGE_WINDOW_SIZE (1 << 30) /* /* * Curl_http2_init_state() is called when the easy handle is created and * Curl_http2_init_state() is called when the easy handle is created and * allows for HTTP/2 specific init of state. * allows for HTTP/2 specific init of state. Loading Loading @@ -965,7 +967,7 @@ static ssize_t data_source_read_callback(nghttp2_session *session, */ */ static nghttp2_settings_entry settings[] = { static nghttp2_settings_entry settings[] = { { NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS, 100 }, { NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS, 100 }, { NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE, NGHTTP2_INITIAL_WINDOW_SIZE }, { NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE, HTTP2_HUGE_WINDOW_SIZE }, }; }; #define H2_BUFSIZE 32768 #define H2_BUFSIZE 32768 Loading Loading @@ -2031,7 +2033,8 @@ CURLcode Curl_http2_switched(struct connectdata *conn, else { else { /* stream ID is unknown at this point */ /* stream ID is unknown at this point */ stream->stream_id = -1; stream->stream_id = -1; rv = nghttp2_submit_settings(httpc->h2, NGHTTP2_FLAG_NONE, NULL, 0); rv = nghttp2_submit_settings(httpc->h2, NGHTTP2_FLAG_NONE, settings, sizeof(settings) / sizeof(settings[0])); if(rv != 0) { if(rv != 0) { failf(data, "nghttp2_submit_settings() failed: %s(%d)", failf(data, "nghttp2_submit_settings() failed: %s(%d)", nghttp2_strerror(rv), rv); nghttp2_strerror(rv), rv); Loading @@ -2039,6 +2042,14 @@ CURLcode Curl_http2_switched(struct connectdata *conn, } } } } rv = nghttp2_session_set_local_window_size(httpc->h2, NGHTTP2_FLAG_NONE, 0, HTTP2_HUGE_WINDOW_SIZE); if(rv != 0) { failf(data, "nghttp2_session_set_local_window_size() failed: %s(%d)", nghttp2_strerror(rv), rv); return CURLE_HTTP2; } /* we are going to copy mem to httpc->inbuf. This is required since /* we are going to copy mem to httpc->inbuf. This is required since mem is part of buffer pointed by stream->mem, and callbacks mem is part of buffer pointed by stream->mem, and callbacks called by nghttp2_session_mem_recv() will write stream specific called by nghttp2_session_mem_recv() will write stream specific Loading Loading
docs/TODO +0 −8 Original line number Original line Diff line number Diff line Loading @@ -63,7 +63,6 @@ 5.1 Better persistency for HTTP 1.0 5.1 Better persistency for HTTP 1.0 5.2 support FF3 sqlite cookie files 5.2 support FF3 sqlite cookie files 5.3 Rearrange request header order 5.3 Rearrange request header order 5.4 Use huge HTTP/2 windows 5.5 auth= in URLs 5.5 auth= in URLs 5.6 Refuse "downgrade" redirects 5.6 Refuse "downgrade" redirects 5.7 Brotli compression 5.7 Brotli compression Loading Loading @@ -528,13 +527,6 @@ This is not detailed in any FTP specification. headers use a default value so only headers that need to be moved have to be headers use a default value so only headers that need to be moved have to be specified. specified. 5.4 Use huge HTTP/2 windows We're currently using nghttp2's default window size which is terribly small (64K). This becomes a bottle neck over high bandwidth networks. We should instead make the window size to be very big (512MB?) as we really don't do much flow control anyway. 5.5 auth= in URLs 5.5 auth= in URLs Add the ability to specify the preferred authentication mechanism to use by Add the ability to specify the preferred authentication mechanism to use by Loading
lib/http2.c +13 −2 Original line number Original line Diff line number Diff line Loading @@ -59,6 +59,8 @@ #define nghttp2_session_callbacks_set_error_callback(x,y) #define nghttp2_session_callbacks_set_error_callback(x,y) #endif #endif #define HTTP2_HUGE_WINDOW_SIZE (1 << 30) /* /* * Curl_http2_init_state() is called when the easy handle is created and * Curl_http2_init_state() is called when the easy handle is created and * allows for HTTP/2 specific init of state. * allows for HTTP/2 specific init of state. Loading Loading @@ -965,7 +967,7 @@ static ssize_t data_source_read_callback(nghttp2_session *session, */ */ static nghttp2_settings_entry settings[] = { static nghttp2_settings_entry settings[] = { { NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS, 100 }, { NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS, 100 }, { NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE, NGHTTP2_INITIAL_WINDOW_SIZE }, { NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE, HTTP2_HUGE_WINDOW_SIZE }, }; }; #define H2_BUFSIZE 32768 #define H2_BUFSIZE 32768 Loading Loading @@ -2031,7 +2033,8 @@ CURLcode Curl_http2_switched(struct connectdata *conn, else { else { /* stream ID is unknown at this point */ /* stream ID is unknown at this point */ stream->stream_id = -1; stream->stream_id = -1; rv = nghttp2_submit_settings(httpc->h2, NGHTTP2_FLAG_NONE, NULL, 0); rv = nghttp2_submit_settings(httpc->h2, NGHTTP2_FLAG_NONE, settings, sizeof(settings) / sizeof(settings[0])); if(rv != 0) { if(rv != 0) { failf(data, "nghttp2_submit_settings() failed: %s(%d)", failf(data, "nghttp2_submit_settings() failed: %s(%d)", nghttp2_strerror(rv), rv); nghttp2_strerror(rv), rv); Loading @@ -2039,6 +2042,14 @@ CURLcode Curl_http2_switched(struct connectdata *conn, } } } } rv = nghttp2_session_set_local_window_size(httpc->h2, NGHTTP2_FLAG_NONE, 0, HTTP2_HUGE_WINDOW_SIZE); if(rv != 0) { failf(data, "nghttp2_session_set_local_window_size() failed: %s(%d)", nghttp2_strerror(rv), rv); return CURLE_HTTP2; } /* we are going to copy mem to httpc->inbuf. This is required since /* we are going to copy mem to httpc->inbuf. This is required since mem is part of buffer pointed by stream->mem, and callbacks mem is part of buffer pointed by stream->mem, and callbacks called by nghttp2_session_mem_recv() will write stream specific called by nghttp2_session_mem_recv() will write stream specific Loading