mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-14 07:24:32 +00:00
haproxy public development tree
08b45cb8fd
During the last call to the stats I/O handle, it is possible to have nothing to dump. It may happen for many reasons. For instance, all remaining proxies are disabled or they don't match the specified scope. In HTML or in JSON, it is not really an issue because there is a footer. So there are still some data to push in the response channel buffer. In CSV, it is a problem because there is no footer. It means it is possible to finish the response with no payload at all in the HTX message. Thus, the EOM flag may be added on an empty message. When this happens, a shutdown is performed on an empty HTX message. Because there is nothing to send, the mux on the client side is not notified that the message was properly finished and interprets the shutdown as an abort. The response is chunked. So an abort at this stage means the last CRLF is never sent to the client. All data were sent but the message is invalid because the response chunking is not finished. If the reponse is compressed, because of a similar bug in the comppression filter, the compression is also aborted and the content is truncated because some data a lost in the compression filter. It is design issue with the HTX. It must be addressed. And there is an opportunity to do so with the recent conn-stream refactoring. It must be carefully evaluated first. But it is possible. In the means time and to also fix stable versions, to workaround the bug, a end-of-trailer HTX block is systematically added at the end of the message when the EOM flag is set if the HTX message is empty. This way, there are always some data to send when the EOM flag is set. Note that with a H2 client, it is only a problem when the response is compressed. This patch should fix the issue #1478. It must be backported as far as 2.4. On previous versions there is still the EOM block. |
||
---|---|---|
.github | ||
addons | ||
admin | ||
dev | ||
doc | ||
examples | ||
include | ||
reg-tests | ||
scripts | ||
src | ||
tests | ||
.cirrus.yml | ||
.gitattributes | ||
.gitignore | ||
.mailmap | ||
.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)