httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Pavel Stano <stan...@blackhole.sk>
Subject Re: apache 2.2 mod_proxy_http disable buffering
Date Mon, 03 Dec 2007 16:54:55 GMT
Plüm wrote:
> 
>> -----Ursprüngliche Nachricht-----
>> Von: Pavel Stano 
>> Gesendet: Montag, 3. Dezember 2007 09:53
>> An: dev@httpd.apache.org
>> Betreff: apache 2.2 mod_proxy_http disable buffering
>>
>>
>> hello,
>>
>> it is possible to disable buffering in mod_proxy_http ?
>> or something like flush after each received data (i want this 
> 
> At least with 2.2.6 (possibly earlier 2.2.x versions) it has autoflushing.
> This means once there is no more data available for reading in the response
> stream from the backend it flushes what it got so far. So if your php script
> on the backend generates its response in blocks with pause times between them
> each of them will be send to the client immediately.
> 
> Regards
> 
> Rüdiger

i have 2.2.6, but it dont work, proxy send me data after end of request

i have very simple php script (or .cgi, i try it too)
<?php
echo 'A';
echo 'B';
sleep(5);
echo 'C';
?>
php buffering is configured ok, when i connect with telnet to backend
server a request a.php, it work as expected
it show immedietaly headers and AB and after 5 second it show C and
close connection

when i connect to reverse proxy and request a.php, 5 second is silent
and after that it send me response

maybe a bug in mod_proxy_http ? (or not a bug but broken feature :))

here is strace from that proxy

... we write request to backend
22112 17:06:47.916530 writev(12, [{"GET /a.php HTTP/1.1\r\n", 21},
{"Host: rtfm.home\r\n", 17}, {"Max-Forwards: 10\r\n", 18},
{"X-Forwarded-For: 127.0.0.1\r\n", 28}, {"X-Forwarded-Host:
rtfm.home\r\n", 29}, {"X-Forwarded-Server: rtfm.home\r\n", 31},
{"Connection: Keep-Alive\r\n", 24}, {"\r\n", 2}], 8) = 170

... we got answer (headers and AB)
22112 17:06:47.920203 read(12, "HTTP/1.1 200 OK\r\nDate: Mon, 03 D"...,
8000) = 156
22112 17:06:47.920418 poll( <unfinished ...>

... here we want send first data to client, but we just wait for data
from backend

... after 5 seconds we got C and send everything to client
22112 17:06:52.920176 <... poll resumed> [{fd=12, events=POLLIN,
revents=POLLIN}], 1, 60000) = 1
22112 17:06:52.920232 read(12, "1\r\nC\r\n3\r\n \n\n\r\n0\r\n\r\n",
8000) = 19
22112 17:06:52.920315 close(12)         = 0
22112 17:06:52.920414 writev(11, [{"HTTP/1.1 200 OK\r\nDate: Mon, 03
D"..., 139}, {"A", 1}, {"B", 1}, {"C", 1}, {" \n\n", 3}], 5) = 145
22112 17:06:52.920561 times({tms_utime=0, tms_stime=0, tms_cutime=0,
tms_cstime=0}) = 432369321
22112 17:06:52.920626 shutdown(11, 1 /* send */) = 0

maybe can someone look at the code if it can be fixed with some small
patch ? i dont understand yet those buckets and brigades

thanks

-- 
Pavel Stano

Mime
View raw message