It seems like this patch should be at a higher level.  Don't we also
have problems with POST to any other sort of included subrequest 
being transformed into a GET but retaining the content-length 
or other irrelevant (nasty) headers? 

Is there a more appropriate place to make this correction for the
benefit of all sorts of subrequest includes?

Bill

At 03:24 AM 11/8/2002, [EMAIL PROTECTED] wrote:
>brianp      2002/11/08 01:24:00
>
>  Modified:    .        CHANGES
>               modules/proxy proxy_http.c
>  Log:
>  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.
>  
>  Revision  Changes    Path
>  1.971     +4 -0      httpd-2.0/CHANGES
>  
>  Index: CHANGES
>  ===================================================================
>  RCS file: /home/cvs/httpd-2.0/CHANGES,v
>  retrieving revision 1.970
>  retrieving revision 1.971
>  diff -u -r1.970 -r1.971
>  --- CHANGES   7 Nov 2002 23:11:09 -0000       1.970
>  +++ CHANGES   8 Nov 2002 09:24:00 -0000       1.971
>  @@ -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]
>  
>  
>  
>  1.164     +19 -0     httpd-2.0/modules/proxy/proxy_http.c
>  
>  Index: proxy_http.c
>  ===================================================================
>  RCS file: /home/cvs/httpd-2.0/modules/proxy/proxy_http.c,v
>  retrieving revision 1.163
>  retrieving revision 1.164
>  diff -u -r1.163 -r1.164
>  --- proxy_http.c      25 Oct 2002 20:58:55 -0000      1.163
>  +++ proxy_http.c      8 Nov 2002 09:24:00 -0000       1.164
>  @@ -597,7 +597,26 @@
>                        || !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,
>  
>  
>  

Reply via email to