On the backend side, HTTP/0.9 transcoder is responsible to convert a HTX
request into a HTTP start line. In particular, path is generated from
the HTX request URI.
However, an absolute URI was not converted correctly in a HTTP/0.9
simple path. This occurs notably in most cases when using HTTP/2 or 3 on
the frontend side.
This issue was detected when running QUIC interop. Some servers
implementation such as picoquic would reject these requests as they are
considered invalid.
To adjust this, extract the path component from HTX uri using
http_uri_parser API.
This should be backported up to 3.3 as this is a QUIC backend fix.
struct htx *htx = NULL;
struct htx_blk *blk;
struct htx_sl *sl = NULL;
+ struct http_uri_parser uri_parser;
int32_t idx;
uint32_t bsize, fsize;
struct buffer *res = NULL;
/* Only GET supported for HTTP/0.9. */
b_putist(res, ist("GET "));
- b_putist(res, htx_sl_req_uri(sl));
+ uri_parser = http_uri_parser_init(htx_sl_req_uri(sl));
+ b_putist(res, http_parse_path(&uri_parser));
b_putist(res, ist("\r\n"));
htx_remove_blk(htx, blk);
total += fsize;