diff --git a/doc/configuration.txt b/doc/configuration.txt index 3c10e4d16..7a5ace286 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -1279,8 +1279,8 @@ balance url_param [check_post []] If the modifier "check_post" is used, then an HTTP POST request entity will be searched for the parameter argument, - when the question mark indicating a query string ('?') is not - present in the URL. Optionally, specify a number of octets to + when it is not found in a query string after a question mark + ('?') in the URL. Optionally, specify a number of octets to wait for before attempting to search the message body. If the entity can not be searched, then round robin is used for each request. For instance, if your clients always send the LB diff --git a/src/backend.c b/src/backend.c index 7554923d9..f3d9f095e 100644 --- a/src/backend.c +++ b/src/backend.c @@ -558,14 +558,13 @@ int assign_server(struct session *s) /* URL Parameter hashing */ if (s->txn.req.msg_state < HTTP_MSG_BODY) break; - if (s->txn.meth == HTTP_METH_POST && - memchr(s->txn.req.sol + s->txn.req.sl.rq.u, '&', - s->txn.req.sl.rq.u_l ) == NULL) + + s->srv = get_server_ph(s->be, + s->txn.req.sol + s->txn.req.sl.rq.u, + s->txn.req.sl.rq.u_l); + + if (!s->srv && s->txn.meth == HTTP_METH_POST) s->srv = get_server_ph_post(s); - else - s->srv = get_server_ph(s->be, - s->txn.req.sol + s->txn.req.sl.rq.u, - s->txn.req.sl.rq.u_l); break; case BE_LB_HASH_HDR: diff --git a/src/proto_http.c b/src/proto_http.c index eb6ba30b3..1061c35ec 100644 --- a/src/proto_http.c +++ b/src/proto_http.c @@ -3631,8 +3631,7 @@ int http_process_request(struct session *s, struct buffer *req, int an_bit) if (!(s->flags & (SN_ASSIGNED|SN_DIRECT)) && s->txn.meth == HTTP_METH_POST && s->be->url_param_name != NULL && s->be->url_param_post_limit != 0 && - (txn->flags & (TX_REQ_CNT_LEN|TX_REQ_TE_CHNK)) && - memchr(msg->sol + msg->sl.rq.u, '?', msg->sl.rq.u_l) == NULL) { + (txn->flags & (TX_REQ_CNT_LEN|TX_REQ_TE_CHNK))) { buffer_dont_connect(req); req->analysers |= AN_REQ_HTTP_BODY; }