]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: http-client: Ignore 1XX interim responses in non-HTX mode
authorChristopher Faulet <cfaulet@haproxy.com>
Tue, 8 Jul 2025 06:38:31 +0000 (08:38 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Wed, 9 Jul 2025 14:27:24 +0000 (16:27 +0200)
When the response is re-formatted in raw message, the 1XX interim responses
must be skipped. Otherwise, information of the first interim response will
be saved (status line and headers) and those from the final response will be
dropped.

Note that for now, in HTX-mode, the interim messages are removed.

This patch must be backported as far as 2.6.

src/http_client.c

index 809e437d590e4406079c7e9d7721030dd9c7ba74..a43022c90755e09a77acc6e0ef6f97351f11224b 100644 (file)
@@ -648,6 +648,23 @@ void httpclient_applet_io_handler(struct appctx *appctx)
                                if (!sl || (!(sl->flags & HTX_SL_F_IS_RESP)))
                                        goto out;
 
+                               /* Skipp any 1XX interim responses */
+                               if (sl->info.res.status < 200 &&
+                                   (sl->info.res.status == 100 || sl->info.res.status >= 102)) {
+                                       while (blk) {
+                                               enum htx_blk_type type = htx_get_blk_type(blk);
+                                               uint32_t sz = htx_get_blksz(blk);
+
+                                               c_rew(res, sz);
+                                               blk = htx_remove_blk(htx, blk);
+                                               if (type == HTX_BLK_EOH) {
+                                                       htx_to_buf(htx, &res->buf);
+                                                       break;
+                                               }
+                                       }
+                                       break;
+                               }
+
                                /* copy the status line in the httpclient */
                                hc->res.status = sl->info.res.status;
                                hc->res.vsn = istdup(htx_sl_res_vsn(sl));