mod_proxy does not send a Content-Length header, seems because of the
flush bucket inserted by ap_proxy_http_process_response()
if i break in ap_content_length_filter, when a request is handled by
default_handler, brigade looks like so:
(gdb) dump_brigade b
dump of brigade 0x8235318
0: bucket=FILE(0x8238c28), length=26, data=0x8238c78
1: bucket=EOS(0x822e998), length=0, data=0x0
here's what it currently looks like when handled by the proxy:
(gdb) dump_brigade b
dump of brigade 0x82310a8
0: bucket=HEAP(0x822e998), length=26, data=0x8238c28
1: bucket=FLUSH(0x8218ea8), length=0, data=0x0
(gdb) dump_brigade b
dump of brigade 0x82310a8
0: bucket=EOS(0x8238c28), length=0, data=0x0
if i remove the flush bucket (patch below), then proxy requests do get a
Content-Length header. doesn't seem like proxy should be flushing to
begin with. thoughts?
Index: modules/proxy/proxy_http.c
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/proxy/proxy_http.c,v
retrieving revision 1.143
diff -u -r1.143 proxy_http.c
--- modules/proxy/proxy_http.c 2 Apr 2002 04:30:49 -0000 1.143
+++ modules/proxy/proxy_http.c 5 Apr 2002 04:17:09 -0000
@@ -841,7 +841,6 @@
if ( (conf->error_override ==0) || r->status < 400 ) {
/* read the body, pass it to the output filters */
- apr_bucket *e;
int finish = FALSE;
while (ap_get_brigade(rp->input_filters,
bb,
@@ -873,12 +872,6 @@
ap_proxy_http_cleanup(r, p_conn, backend);
/* signal that we must leave */
finish = TRUE;
- }
-
- /* if no EOS yet, then we must flush */
- if (FALSE == finish) {
- e = apr_bucket_flush_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, e);
}
/* try send what we read */