mirror of
https://github.com/haproxy/haproxy.git
synced 2026-07-15 03:56:56 -04:00
HAProxy - Load balancer
Tunnel management between the H1 and H2 multiplexers is a bit blurred. And the HTX is not enough well defined on this point to make things clear. In fact, Establishing a tunnel between an H2 client and an H1 server, or the opposite is buggy because the both multiplexers don't handle the EOM block the same way when a tunnel is established. In fact, the H2 multiplexer is pretty strict and add an END_STREAM flag when an EOM block is found, while the H1 multiplexer is more flexible. The purpose of this patch is to make the EOM block usage pretty clear and to fix the HTTP multiplexers to really handle HTTP tunnels in the right way. Now, an EOM block is used to mark the end of an HTTP message, semantically speaking. That means it may be followed by tunneled data. Thus, CONNECT requests are now finished by an EOM block, just after the EOH block. On the H1 multiplexer side, a tunnel is now only established on the response path. So a CONNECT request remains in a DONE state waiting for the 2xx response. On the H2 multiplexer side, a flag is used to know an HTTP tunnel is requested, to not immediately add the END_STREAM flag on the EOM block. All these changes are sensitives and not backportable because of recent changes. The same problem exists on earlier versions and should be addressed. But it will only be possible with a specific patchset. This patch relies on the following ones : * MEDIUM: mux-h1: Properly handle tunnel establishments and aborts * MEDIUM: mux-h2: Close streams when processing data for an aborted tunnel * MEDIUM: mux-h2: Block client data on server side waiting tunnel establishment * MINOR: mux-h2: Add 2 flags to help to properly handle tunnel mode * MINOR: mux-h1: Split H1C_F_WAIT_OPPOSITE flag to separate input/output sides * MINOR: mux-h1/mux-fcgi: Don't set TUNNEL mode if payload length is unknown |
||
|---|---|---|
| .github | ||
| contrib | ||
| doc | ||
| examples | ||
| include | ||
| reg-tests | ||
| scripts | ||
| src | ||
| tests | ||
| .cirrus.yml | ||
| .gitattributes | ||
| .gitignore | ||
| .travis.yml | ||
| BRANCHES | ||
| 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 - 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)