mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-28 01:01:18 +02:00
Recent commit 4710d20 ("BUG/MEDIUM: mux-h1: make HTX chunking consistent with H2") tried to address chunking inconsistencies between H1/HTX/H2 and has enforced it on every outgoing message carrying H1_MF_XFER_LEN without H1_MF_CLEN nor H1_MF_CHNK. But it also does it on requests, which is not appropriate since a request by default doesn't have a message body unless explicitly mentioned. Also make sure we only do this on HTTP/1.1 messages. The problem is to guarantee the highest level of compatibility between H1/H1, H1/H2, H2/H1 in each direction regarding the lack of content- length. We have this truth table (a star '*' indicates which one can pass trailers) : H1 client -> H1 server : request: CL=0 TE=0 XL=1 -> CL=0 TE=0 CL=0 TE=1 XL=1 -> CL=0 TE=1 * CL=1 TE=0 XL=1 -> CL=1 TE=0 CL=1 TE=1 XL=1 -> CL=1 TE=1 * response: CL=0 TE=0 XL=0 -> CL=0 TE=0 CL=0 TE=1 XL=1 -> CL=0 TE=1 * CL=1 TE=0 XL=1 -> CL=1 TE=0 CL=1 TE=1 XL=1 -> CL=1 TE=1 * H2 client -> H1 server : (H2 messages always carry XFER_LEN) request: CL=0 XL=1 -> CL=0 TE=0 CL=1 XL=1 -> CL=1 TE=0 response: CL=0 TE=0 XL=0 -> CL=0 CL=0 TE=1 XL=1 -> CL=0 * CL=1 TE=0 XL=1 -> CL=1 CL=1 TE=1 XL=1 -> CL=1 * H1 client -> H2 server : (H2 messages always carry XFER_LEN) request: CL=0 TE=0 XL=1 -> CL=0 CL=0 TE=1 XL=1 -> CL=0 * CL=1 TE=0 XL=1 -> CL=1 CL=1 TE=1 XL=1 -> CL=1 * response: CL=0 XL=1 -> CL=0 TE=1 * CL=1 XL=1 -> CL=1 TE=0 For H1 client to H2 server, it will be possible to rely on the presence of "TE: trailers" in the H1 request to automatically switch to chunks in the response, and be able to pass trailers at the end. For now this check is not implemented so an H2 response missing a content-length to an H1 request will always have a transfer-encoding header added and trailers will be forwarded if any. This patch depends on previous commit "MINOR: mux-h1: parse the content-length header on output and set H1_MF_CLEN" to work properly. Since the aforementioned commit is scheduled for backport to 1.9 this commit must also be backported to 1.9.
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)
Description
Languages
C
98.1%
Shell
0.8%
Makefile
0.5%
Lua
0.2%
Python
0.2%