BUG/MINOR: http-htx: Don't consider an URI as normalized after a set-uri action

An abosulte URI is marked as normalized if it comes from an H2 client. This
way, we know we can send a relative URI to an H1 server. But, after a
set-uri action, the URI must no longer be considered as normalized.
Otherwise there is no way to send an absolute URI on the server side.

If it is important to update a normalized absolute URI without altering this
property, the host, path and/or query-string must be set separatly.

This patch should fix the issue #1938. It should be backported as far as
2.4.
This commit is contained in:
Christopher Faulet 2022-11-22 15:41:48 +01:00
parent 1c52121e6d
commit 84cdbe478a
2 changed files with 6 additions and 3 deletions

View File

@ -7366,9 +7366,11 @@ http-request set-uri <fmt> [ { if | unless } <condition> ]
This rewrites the request URI with the result of the evaluation of format
string <fmt>. The scheme, authority, path and query string are all replaced
at once. This can be used to rewrite hosts in front of proxies, or to
perform complex modifications to the URI such as moving parts between the
path and the query string.
at once. This can be used to rewrite hosts in front of proxies, or to perform
complex modifications to the URI such as moving parts between the path and
the query string. If an absolute URI is set, it will be sent as is to
HTTP/1.1 servers. If it is not the desired behavior, the host, the path
and/or the query string should be set separately.
See also "http-request set-path" and "http-request set-query".
http-request set-var(<var-name>[,<cond> ...]) <expr> [ { if | unless } <condition> ]

View File

@ -389,6 +389,7 @@ int http_replace_req_uri(struct htx *htx, const struct ist uri)
goto fail;
sl = http_get_stline(htx);
sl->flags &= ~HTX_SL_F_NORMALIZED_URI;
if (!http_update_host(htx, sl, uri))
goto fail;