httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ruediger Pluem <rpl...@apache.org>
Subject Re: apache 2.2 mod_proxy_http disable buffering
Date Mon, 03 Dec 2007 17:08:38 GMT


On 12/03/2007 05:54 PM, Pavel Stano wrote:
> 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

Please provide a gdb backtrace of the process when it waits for data from
the backend (http://httpd.apache.org/dev/debugging.html).

Regards

Rüdiger


Mime
View raw message