mirror of
https://github.com/haproxy/haproxy.git
synced 2026-04-28 09:38:29 -04:00
HAProxy - Load balancer
The H2 spec says that a HEADERS frame turns an idle stream to the open state, and it may then turn to half-closed(remote) on ES, then to close, all at once, if we respond with RST (e.g. on error). Due to the fact that we process a complete frame at once since h2_dec_hdrs() may reassemble CONTINUATION frames until everything is complete, the state was only committed after the frame was completley valid (otherwise multiple passes could result in subsequent frames being rejected as the stream ID would be equal to the highest one). However this is not correct because it means that a client may retry on the same ID as a previously failed one, which technically is forbidden (for example the client couldn't know which of them a WINDOW_UPDATE or RST_STREAM frame is for). In practice, due to the error paths, this would only be possible when failing to decode HPACK while leaving the HPACK stream intact, thus when the valid decoded HPACK stream cannot be turned into a valid HTTP representation, e.g. when the resulting headers are too large for example. The solution to avoid this consists in committing the stream ID on this error path as well. h2spec continues to be happy. Thanks to Annika Wickert and Tim Windelschmidt for reporting this issue. This fix must be backported to all stable versions. |
||
|---|---|---|
| .github | ||
| addons | ||
| admin | ||
| dev | ||
| doc | ||
| examples | ||
| include | ||
| reg-tests | ||
| scripts | ||
| src | ||
| tests | ||
| .cirrus.yml | ||
| .gitattributes | ||
| .gitignore | ||
| .mailmap | ||
| .travis.yml | ||
| BRANCHES | ||
| BSDmakefile | ||
| CHANGELOG | ||
| CONTRIBUTING | ||
| INSTALL | ||
| LICENSE | ||
| MAINTAINERS | ||
| Makefile | ||
| README | ||
| SUBVERS | ||
| VERDATE | ||
| VERSION | ||
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 - BRANCHES to understand the project's life cycle and what version to use - 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)