From: Brian Pane Date: Fri, 8 Nov 2002 09:24:00 +0000 (+0000) Subject: When doing a GET of a proxied URL as a subrequest within X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3a25141e835cb8e556c733f07afbb1b260d1c958;p=thirdparty%2Fapache%2Fhttpd.git When doing a GET of a proxied URL as a subrequest within a POSTed request, don't send the original POST's Content-Length as part of the header for the GET. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@97455 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index 0a2425db751..6b43a82a6da 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,9 @@ Changes with Apache 2.0.44 + *) Fix a bug in which mod_proxy sent an invalid Content-Length + when a proxied URL was invoked as a server-side include within + a page generated in response to a form POST. [Brian Pane] + *) Added code to process min and max file size directives and to init the expirychk flag in mod_disk_cache. Added a clarifying comment to cache_util. [Paul J. Reder] diff --git a/modules/proxy/proxy_http.c b/modules/proxy/proxy_http.c index ee80c67d3c3..4720e7fe91e 100644 --- a/modules/proxy/proxy_http.c +++ b/modules/proxy/proxy_http.c @@ -597,8 +597,27 @@ apr_status_t ap_proxy_http_request(apr_pool_t *p, request_rec *r, || !apr_strnatcasecmp(headers_in[counter].key, "If-None-Match")) { continue; } + + /* If you POST to a page that gets server-side parsed + * by mod_include, and the parsing results in a reverse + * proxy call, the proxied request will be a GET, but + * its request_rec will have inherited the Content-Length + * of the original request (the POST for the enclosing + * page). We can't send the original POST's request body + * as part of the proxied subrequest, so we need to avoid + * sending the corresponding content length. Otherwise, + * the server to which we're proxying will sit there + * forever, waiting for a request body that will never + * arrive. + */ + if ((r->method_number == M_GET) && headers_in[counter].key && + !apr_strnatcasecmp(headers_in[counter].key, + "Content-Length")) { + continue; + } } + buf = apr_pstrcat(p, headers_in[counter].key, ": ", headers_in[counter].val, CRLF, NULL);