96a10c24cf
The H2 demux only checks for too many streams in h2c_frt_stream_new(), then refuses to create a new stream and causes the connection to be aborted by sending a GOAWAY frame. This will also happen if any error happens during the stream creation (e.g. memory allocation). RFC7540#5.1.2 says that attempts to create streams in excess should instead be dealt with using an RST_STREAM frame conveying either the PROTOCOL_ERROR or REFUSED_STREAM reason (the latter being usable only if it is guaranteed that the stream was not processed). In theory it should not happen for well behaving clients, though it may if we configure a low enough h2.max_concurrent_streams limit. This error however may definitely happen on memory shortage. Previously it was not possible to use RST_STREAM due to the fact that the HPACK decompressor would be desynchronized. But now we first decode and only then try to allocate the stream, so the decompressor remains synchronized regardless of policy or resources issues. With this patch we enforce stream termination with RST_STREAM and REFUSED_STREAM if this protocol violation happens, as well as if there is a temporary condition like a memory allocation issue. It will allow a client to recover cleanly. This could possibly be backported to 1.9. Note that this requires that these five previous patches are merged as well : MINOR: h2: add a bit-based frame type representation MEDIUM: mux-h2: remove padlen during headers phase MEDIUM: mux-h2: decode HEADERS frames before allocating the stream MINOR: mux-h2: make h2c_send_rst_stream() use the dummy stream's error code MINOR: mux-h2: add a new dummy stream for the REFUSED_STREAM error code |
||
---|---|---|
contrib | ||
doc | ||
ebtree | ||
examples | ||
include | ||
reg-tests | ||
scripts | ||
src | ||
tests | ||
.gitignore | ||
CHANGELOG | ||
CONTRIBUTING | ||
INSTALL | ||
LICENSE | ||
MAINTAINERS | ||
Makefile | ||
README | ||
ROADMAP | ||
SUBVERS | ||
VERDATE | ||
VERSION |
README
The HAProxy documentation has been split into a number of different files for ease of use. Please refer to the following files depending on what you're looking for : - INSTALL for instructions on how to build and install HAProxy - LICENSE for the project's license - CONTRIBUTING for the process to follow to submit contributions The more detailed documentation is located into the doc/ directory : - doc/intro.txt for a quick introduction on HAProxy - doc/configuration.txt for the configuration's reference manual - doc/lua.txt for the Lua's reference manual - doc/SPOE.txt for how to use the SPOE engine - doc/network-namespaces.txt for how to use network namespaces under Linux - doc/management.txt for the management guide - doc/regression-testing.txt for how to use the regression testing suite - doc/peers.txt for the peers protocol reference - doc/coding-style.txt for how to adopt HAProxy's coding style - doc/internals for developer-specific documentation (not all up to date)