mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-02-22 13:46:52 +00:00
haproxy public development tree
This is not exactly a bug but a long-time design limitation. We used not to decode trailers in H2, resulting in broken connections each time a trailer was sent, since it was impossible to keep the HPACK decompressor synchronized. Now that the sequencing of operations permits it, we must make sure to at least properly decode them. What we try to do is to identify if a HEADERS frame was already seen and use this indication to know if it's a headers or a trailers. For this, h2c_decode_headers() checks if the stream indicates that a HEADERS frame was already received. If so, it decodes it and emits the trailing 0 CRLF CRLF in case of H1, or the HTX_EOD + HTX_EOM blocks in case of HTX, to terminate the data stream. The trailers contents are still deleted for now but the request works, and the connection remains synchronized and usable for subsequent streams. The correctness may be tested using a simple config and h2spec : h2spec -o 1000 -v -t -S -k -h 127.0.0.1 -p 4443 generic/4/4 This should definitely be backported to 1.9 given the low impact for the benefit. However it cannot be backported to 1.8 since the operations cannot be resumed. The following patches are also needed with this one : MINOR: mux-h2: make h2c_decode_headers() return a status, not a count MINOR: mux-h2: add a new dummy stream : h2_error_stream MEDIUM: mux-h2: make h2c_decode_headers() support recoverable errors BUG/MINOR: mux-h2: detect when the HTX EOM block cannot be added after headers MINOR: mux-h2: check for too many streams only for idle streams MINOR: mux-h2: set H2_SF_HEADERS_RCVD when a HEADERS frame was decoded |
||
---|---|---|
contrib | ||
doc | ||
ebtree | ||
examples | ||
include | ||
reg-tests | ||
scripts | ||
src | ||
tests | ||
.gitignore | ||
CHANGELOG | ||
CONTRIBUTING | ||
INSTALL | ||
LICENSE | ||
MAINTAINERS | ||
Makefile | ||
README | ||
ROADMAP | ||
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 - 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)