From 4939f18ff7e984f3861135a2776c94ba967b2226 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Wed, 25 Feb 2026 16:29:26 +0100 Subject: [PATCH] MEDIUM: http-ana: Use the version of the opposite side for internal messages When the response is send by HAProxy, from a applet or for the analyzers, The request version is used for the response. The main reason is that there is not real version for the response when this happens. "HTTP/1.1" is used, but it is in fact just an HTX response. So the version of the request is used. In the same manner, when the request is sent from an applet (httpclient), the response version is used, once available. The purpose of this change is to return the most accurate version from the user point of view. --- src/http_ana.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/http_ana.c b/src/http_ana.c index 399c75906..a746ed96e 100644 --- a/src/http_ana.c +++ b/src/http_ana.c @@ -1475,12 +1475,20 @@ int http_wait_for_response(struct stream *s, struct channel *rep, int an_bit) /* Not an HTTP response */ msg->vsn = 0; } - else { + else if (objt_server(s->target)) { /* HTTP response from a server, use it to set the response version */ char *ptr; ptr = HTX_SL_RES_VPTR(sl); msg->vsn = ((ptr[5] - '0') << 4) + (ptr[7] - '0'); + + /* If front endpoint is an applet, use the server version for the request */ + if (sc_ep_test(s->scf, SE_FL_T_APPLET)) + txn->req.vsn = msg->vsn; + } + else { + /* HTTP response from an applet, use the request version for the response */ + msg->vsn = txn->req.vsn; } /* Adjust server's health based on status code. Note: status codes 501 @@ -4728,6 +4736,9 @@ int http_forward_proxy_resp(struct stream *s, int final) if (s->txn->meth == HTTP_METH_HEAD) htx_skip_msg_payload(htx); + /* Respnse from haproxy, override HTTP response verison using the request one */ + s->txn->rsp.vsn = s->txn->req.vsn; + channel_auto_read(req); channel_abort(req); channel_htx_erase(req, htxbuf(&req->buf));