On backend side, H3 layer is responsible to decode a HTTP/3 response into an HTX message. Multiple responses may be received on a single stream with interim status codes prior to the final one. h3_resp_headers_to_htx() is the function used solely on backend side responsible for H3 response to HTX transcoding. This patch extends it to be able to properly support interim responses. When such a response is received, the new flag H3_SF_RECV_INTERIM is set. This is converted to QMUX qcs flag QC_SF_EOI_SUSPENDED. The objective of this latter flag is to prevent stream EOI to be reported during stream rcv_buf callback, even if HTX message contains EOM and is empty. QC_SF_EOI_SUSPENDED will be cleared when the final response is finally converted, which unblock stream EOI notification for next rcv_buf invocations. Note however that HTX EOM is untouched : it is always set for both interim and final response reception. As a minor adjustment, HTX_SL_F_BODYLESS is always set for interim responses. Contrary to frontend interim response handling, a flag is necessary on QMUX layer. This is because H3 to HTX transcoding and rcv_buf callback are two distinct operations, called under different context (MUX vs stream tasklet). Also note that H3 layer has two distinct flags for interim response handling, one only used as a server (FE side) and the other as a client (BE side). It was preferred to used two distinct flags which is considered less error-prone, contrary to a single unified flag which would require to always set the proxy side to ensure it is relevant or not. No need to backport. |
||
---|---|---|
.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.md | ||
SUBVERS | ||
VERDATE | ||
VERSION |
HAProxy
HAProxy is a free, very fast and reliable reverse-proxy offering high availability, load balancing, and proxying for TCP and HTTP-based applications.
Installation
The INSTALL file describes how to build HAProxy. A list of packages is also available on the wiki.
Getting help
The discourse and the mailing-list are available for questions or configuration assistance. You can also use the slack or IRC channel. Please don't use the issue tracker for these.
The issue tracker is only for bug reports or feature requests.
Documentation
The HAProxy documentation has been split into a number of different files for ease of use. It is available in text format as well as HTML. The wiki is also meant to replace the old architecture guide.
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)
License
HAProxy is licensed under GPL 2 or any later version, the headers under LGPL 2.1. See the LICENSE file for a more detailed explanation.