You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@serf.apache.org by ko...@apache.org on 2017/03/22 18:07:52 UTC
svn commit: r1788146 - /serf/trunk/protocols/http2_protocol.c
Author: kotkov
Date: Wed Mar 22 18:07:51 2017
New Revision: 1788146
URL: http://svn.apache.org/viewvc?rev=1788146&view=rev
Log:
HTTP/2: Fix improper handling of SETTINGS_INITIAL_WINDOW_SIZE that
could result in the "HTTP2 flow control limits exceeded" error when
talking to nginx servers:
> serf_get --http2 https://www.cloudflare.com
Error running context: (120153) HTTP2 flow control limits exceeded
Serf used the incoming value to update the size of the connection
flow-control window. Doing so violates RFC 7540, 6.9.2 [1], which
states that the SETTINGS_INITIAL_WINDOW_SIZE value in the SETTINGS
frame *cannot* alter the connection flow-control window size, and
that it only affects the initial window size for new streams.
[1] https://tools.ietf.org/html/rfc7540#section-6.9.2
* protocols/http2_protocol.c
(http2_handle_settings): Don't change the connection flow-control
window size. Include the relevant part of RFC 7540 in the comment.
Approved by: rhuijben
Modified:
serf/trunk/protocols/http2_protocol.c
Modified: serf/trunk/protocols/http2_protocol.c
URL: http://svn.apache.org/viewvc/serf/trunk/protocols/http2_protocol.c?rev=1788146&r1=1788145&r2=1788146&view=diff
==============================================================================
--- serf/trunk/protocols/http2_protocol.c (original)
+++ serf/trunk/protocols/http2_protocol.c Wed Mar 22 18:07:51 2017
@@ -824,7 +824,14 @@ http2_handle_settings(void *baton,
/* Sanitize? */
serf__log(LOGLVL_INFO, SERF_LOGHTTP2, h2->config,
"Setting Initial Window Size %u\n", value);
- h2->lr_window += (value - h2->lr_default_window);
+ /* This only affects the default window size for new streams
+ (the connection window size is left unchanged):
+
+ Both endpoints can adjust the initial window size for new
+ streams by including a value for SETTINGS_INITIAL_WINDOW_SIZE
+ in the SETTINGS frame that forms part of the connection
+ preface. The connection flow-control window can only be
+ changed using WINDOW_UPDATE frames. */
h2->lr_default_window = value;
break;
case HTTP2_SETTING_MAX_FRAME_SIZE: