From fad68cb16d7f99acd2b327ff2f8a4d9ab88a68d8 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Mon, 3 Feb 2025 18:36:17 +0100 Subject: [PATCH] BUG/MINOR: http-check: Don't pretend a C-L heeader is set before adding it When a GET/HEAD/OPTIONS/DELETE healthcheck request was formatted, we claimed there was a "content-length" header set even when there was no payload, leading to actually send a "content-length: 0" header to the server. It was unexpected and could be rejected by servers. When a healthcheck request is sent we must take care to state there is a "content-length" header when it is explicitly added. This patch should fix the issue #2851. It must be backported as far as 2.9. --- src/tcpcheck.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/tcpcheck.c b/src/tcpcheck.c index 6e12eb6c28ca..a366b9e59b4a 100644 --- a/src/tcpcheck.c +++ b/src/tcpcheck.c @@ -1569,7 +1569,7 @@ enum tcpcheck_eval_ret tcpcheck_eval_send(struct check *check, struct tcpcheck_r if ((istlen(vsn) == 6 && *(vsn.ptr+5) == '2') || (istlen(vsn) == 8 && (*(vsn.ptr+5) > '1' || (*(vsn.ptr+5) == '1' && *(vsn.ptr+7) >= '1')))) slflags |= HTX_SL_F_VER_11; - slflags |= (HTX_SL_F_XFER_LEN|HTX_SL_F_CLEN); + slflags |= HTX_SL_F_XFER_LEN; if (!(send->http.flags & TCPCHK_SND_HTTP_FL_BODY_FMT) && !isttest(send->http.body)) slflags |= HTX_SL_F_BODYLESS; @@ -1628,6 +1628,7 @@ enum tcpcheck_eval_ret tcpcheck_eval_send(struct check *check, struct tcpcheck_r clen = ist((!istlen(body) ? "0" : ultoa(istlen(body)))); if (!htx_add_header(htx, ist("Content-length"), clen)) goto error_htx; + sl->flags |= HTX_SL_F_CLEN; } if (!htx_add_endof(htx, HTX_BLK_EOH) ||