mirror of
http://git.haproxy.org/git/haproxy.git
synced 2026-02-12 06:42:37 +02:00
347f464d4e5a8a2bf3acd2411a6c8228e605e7f6
The H1 message parser calls the various message block parsers with an offset indicating where in the buffer to start from, and only consumes the data at the end of the parsing. The headers and trailers parsers have a condition detecting if a headers or trailers block is too large to fit into the buffer. This is detected by an incomplete block while the buffer is full. Unfortunately it doesn't take into account the fact that the block may be parsed after other blocks that are still present in the buffer, resulting in aborting some transfers early as reported in issue #231. This typically happens if a trailers block is incomplete at the end of a buffer full of data, which typically happens with data sizes multiple of the buffer size minus less than the trailers block size. It also happens with the CRLF that follows the 0-sized chunk of any transfer-encoded contents is itself on such a boundary since this CRLF is technically part of the trailers block. This can be reproduced by asking a server to retrieve exactly 31532 or 31533 bytes of static data using chunked encoding with curl, which reports: transfer closed with outstanding read data remaining This issue was revealed in 2.0 and does not affect 1.9 because in 1.9 the trailers block was processed at once as part of the data block processing, and would simply give up and wait for the rest of the data to arrive. It's interesting to note that the headers block parsing is also affected by this issue but in practice it has a much more limited impact since a headers block is normally only parsed at the beginning of a buffer. The only case where it seems to matter is when dealing with a response buffer full of 100-continue header blocks followed by a regular header block, which will then be rejected for the same reason. This fix must be backported to 2.0 and partially to 1.9 (the headers block part).
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
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)
Description
haproxy public development tree. Unstable code.
cachecachingddos-mitigationfastcgihaproxyhigh-availabilityhigh-performancehttphttp2httpsipv6load-balancerproxyproxy-protocolreverse-proxytls13
Readme
250 MiB
Languages
C
98%
Shell
0.9%
Makefile
0.5%
Lua
0.2%
Python
0.2%