mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-23 06:41:32 +02:00
MEDIUM: http: move reqadd after execution of http_request redirect
We still have a plate of spaghetti in the request processing rules. All http-request rules are executed at once, then some responses are built interlaced with other rules that used to be there in the past. Here, reqadd is executed after an http-req redirect rule is *decided*, but before it is *executed*. So let's match the doc and config checks, to put the redirect actually before the reqadd completely.
This commit is contained in:
parent
cfe7fdd02d
commit
5e9edce0f0
@ -3949,6 +3949,18 @@ int http_process_req_common(struct session *s, struct channel *req, int an_bit,
|
||||
goto return_prx_cond;
|
||||
}
|
||||
|
||||
if (http_req_last_rule && http_req_last_rule->action == HTTP_REQ_ACT_REDIR) {
|
||||
if (!http_apply_redirect_rule(http_req_last_rule->arg.redir, s, txn))
|
||||
goto return_bad_req;
|
||||
req->analyse_exp = TICK_ETERNITY;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (http_req_last_rule && http_req_last_rule->action == HTTP_REQ_ACT_CUSTOM_STOP) {
|
||||
req->analyse_exp = TICK_ETERNITY;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* add request headers from the rule sets in the same order */
|
||||
list_for_each_entry(wl, &px->req_add, list) {
|
||||
if (wl->cond) {
|
||||
@ -3964,18 +3976,6 @@ int http_process_req_common(struct session *s, struct channel *req, int an_bit,
|
||||
goto return_bad_req;
|
||||
}
|
||||
|
||||
if (http_req_last_rule && http_req_last_rule->action == HTTP_REQ_ACT_REDIR) {
|
||||
if (!http_apply_redirect_rule(http_req_last_rule->arg.redir, s, txn))
|
||||
goto return_bad_req;
|
||||
req->analyse_exp = TICK_ETERNITY;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (http_req_last_rule && http_req_last_rule->action == HTTP_REQ_ACT_CUSTOM_STOP) {
|
||||
req->analyse_exp = TICK_ETERNITY;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (unlikely(objt_applet(s->target) == &http_stats_applet)) {
|
||||
/* process the stats request now */
|
||||
if (s->fe == s->be) /* report it if the request was intercepted by the frontend */
|
||||
|
Loading…
x
Reference in New Issue
Block a user