Hi, HTTP/2 does flow control at connection level (and stream level). HAProxy's server receive window at connection level is only 65535, severely limiting upload ability. Per bandwidth-delay product, 65535 means at 100ms latency upload can't be faster than 655KB/s.
65535 is the default initial connection window size in the RFC. The size can be raised by the server sending a WINDOW_UPDATE. But HAProxy doesn't do that or throttle connection-level traffic at all, thus RFC-conforming clients have to keep to the 65535 value. Also, the setting tune.h2.initial-window-size only applies to stream windows. See the following comparison of initial connection window sizes of various servers: Nginx: NGX_HTTP_V2_MAX_WINDOW (2^31-1) H2O: H2O_HTTP2_SETTINGS_HOST_CONNECTION_WINDOW_SIZE (16777216) Apache Traffic Server: Http2::initial_window_size (1048576) -klzgrad

