Commit b9785968 authored by Justin Erenkrantz's avatar Justin Erenkrantz
Browse files

Fix the first bucket not getting chunked properly. The reason was that

we left the TE header in the output headers, so ap_set_keepalive didn't
set r->chunked to 1.  So, ap_http_header_filter wouldn't insert CHUNK
filter appropriately.  I have no clue how it chunked anything at all
before this patch, but hey, it looks right now.

Tested with Yahoo, Apple, apache.org, and /.
/. is interesting in that it sends both Conn: Close and TE: chunked.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@91463 13f79535-47bb-0310-9956-ffa450edef68
parent e1e2c633
Loading
Loading
Loading
Loading
+12 −8
Original line number Diff line number Diff line
@@ -792,13 +792,18 @@ apr_status_t ap_proxy_http_process_response(apr_pool_t * p, request_rec *r,
            (r->status != HTTP_RESET_CONTENT) &&	/* not 205 */
            (r->status != HTTP_NOT_MODIFIED)) {	/* not 304 */

            const char *buf;
            if (ap_proxy_liststr((buf = apr_table_get(r->headers_out,
                                  "Transfer-Encoding")), "chunked")) {
            ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
                         "proxy: Transfer-Encoding Chunked!");
            /* We need to copy the output headers and treat them as input
             * headers as well.  BUT, we need to do this before we remove
             * TE and C-L, so that they are preserved accordingly for
             * ap_http_filter to know where to end.
             */
            rp->headers_in = apr_table_copy(r->pool, r->headers_out);

            /* In order for ap_set_keepalive to work properly, we can NOT
             * have any length information stored in the output headers.
             */
            apr_table_unset(r->headers_out,"Transfer-Encoding");
            apr_table_unset(r->headers_out,"Content-Length");
            }

            ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
                         "proxy: start body send");
@@ -811,7 +816,6 @@ apr_status_t ap_proxy_http_process_response(apr_pool_t * p, request_rec *r,
            /* read the body, pass it to the output filters */
                apr_off_t readbytes;
                apr_bucket *e;
                rp->headers_in = r->headers_out;
                readbytes = AP_IOBUFSIZE;
                while (ap_get_brigade(rp->input_filters, 
                                       bb,