mirror of
https://github.com/apache/httpd.git
synced 2026-01-13 21:42:17 +03:00
* Give ap_proxy_post_request as chance to act correctly on the status code
by setting r->status temporarily to access_status. r->status might be different than access_status e.g. r->status could be HTTP_OK if e.g. we override the error page on the proxy or if the error was not generated by the backend itself but by the proxy e.g. a bad gateway. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1597352 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@@ -925,6 +925,7 @@ static int proxy_handler(request_rec *r)
|
||||
proxy_worker *worker = NULL;
|
||||
int attempts = 0, max_attempts = 0;
|
||||
struct dirconn_entry *list = (struct dirconn_entry *)conf->dirconn->elts;
|
||||
int saved_status;
|
||||
|
||||
/* is this for us? */
|
||||
if (!r->filename) {
|
||||
@@ -1200,7 +1201,23 @@ static int proxy_handler(request_rec *r)
|
||||
goto cleanup;
|
||||
}
|
||||
cleanup:
|
||||
/*
|
||||
* Save current r->status and set it to the value of access_status which
|
||||
* might be different (e.g. r->status could be HTTP_OK if e.g. we override
|
||||
* the error page on the proxy or if the error was not generated by the
|
||||
* backend itself but by the proxy e.g. a bad gateway) in order to give
|
||||
* ap_proxy_post_request a chance to act correctly on the status code.
|
||||
*/
|
||||
saved_status = r->status;
|
||||
r->status = access_status;
|
||||
ap_proxy_post_request(worker, balancer, r, conf);
|
||||
/*
|
||||
* Only restore r->status if it has not been changed by
|
||||
* ap_proxy_post_request as we assume that this change was intentional.
|
||||
*/
|
||||
if (r->status == access_status) {
|
||||
r->status = saved_status;
|
||||
}
|
||||
|
||||
proxy_run_request_status(&access_status, r);
|
||||
AP_PROXY_RUN_FINISHED(r, attempts, access_status);
|
||||
|
||||
Reference in New Issue
Block a user