You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by Mathias Herberts <Ma...@gicm.fr> on 2004/01/09 13:33:46 UTC
Connection filters and Keep-Alive
Hi,
still in the process of building an Input Connection Filter I noticed
something wrong with all Connection Filter examples I could find
(including HTTPHeadersFixup), in case the connection is instructed to be
kept open with 'Connection: Keep-Alive', several requests will be run
through the same instance of the filter, therefore it is not possible to
safely ignore the possible body of a POST (or DAV) request. One must
keep track of Content-Length and only ignore body if 'Connection: close'
was issued (as per RFC 2616).
Anybody else aware of that?
Mathias.
--
-- Informatique du Credit Mutuel -- Systeme et Technologies Internet
-- 32 rue Mirabeau -- Le Relecq-Kerhuon -- 29808 Brest Cedex 9, FRANCE
-- Tel +33298004653 - Fax +33298284005 - Mail Mathias.Herberts@gicm.fr
-- Key Fingerprint: 8778 D2FD 3B4A 6B33 10AB F503 63D0 ADAE 9112 03E4
--
Reporting bugs: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html
Re: Connection filters and Keep-Alive
Posted by Stas Bekman <st...@stason.org>.
Stas Bekman wrote:
> Stas Bekman wrote:
>
>> Mathias Herberts wrote:
>>
>>> Hi,
>>>
>>> still in the process of building an Input Connection Filter I noticed
>>> something wrong with all Connection Filter examples I could find
>>> (including HTTPHeadersFixup), in case the connection is instructed to
>>> be kept open with 'Connection: Keep-Alive', several requests will be
>>> run through the same instance of the filter, therefore it is not
>>> possible to safely ignore the possible body of a POST (or DAV)
>>> request. One must keep track of Content-Length and only ignore body
>>> if 'Connection: close' was issued (as per RFC 2616).
>>>
>>> Anybody else aware of that?
>>
>>
>>
>> Not me. I'm still learning the topic ;) Thanks for the heads up,
>> Mathias. I have never tried with 'Connection: Keep-Alive', though I
>> think there must be a better way to tell separate requests from each
>> other. I'll investigate this and get followup on this.
>
>
> The net thrown in the httpd-dev sea came back empty. The fish is hiding
> behind the rocks, scratching their private itches.
>
> It seems that Apache provides no way to tell one request over another
> when Keep-Alive is in effect. I need to look at the ap_discard_body
> function, since somehow it knows when there is no more body to read.
>
> Meanwhile I have the following filter tandem idea that may do the trick.
> We could add a connection response filter, whose only purpose will be to
> set a note in the connection object when it sees the response headers (I
> don't think EOS is sent in the response stream) flagging the incoming
> filter mate that the next time it's invoked it'll be a new request. That
> will only work if after sending the headers, it's known that the
> request body is fully consumed. I think that's the case, but I'm not
> 100% sure.
I first successfully implemented the tandem trick to learn that when the
method is HEAD, the filter won't see the EOS bucket.
Digging into the Apache source I've found a much simpler way to handle the
context reset, using $c->keepalives counter, which I've exposed recently (i.e.
you need the current cvs or wait till 1.99_13 is released).
That technique is documented at:
http://perl.apache.org/docs/2.0/user/handlers/filters.html#Connection_Filters_over_KeepAlive_Connections
I've just uploaded a new version of
Apache-Filter-HTTPHeadersFixup-0.02_01.tar.gz on CPAN, which now uses that
technique to handle keepalive connections.
__________________________________________________________________
Stas Bekman JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/ mod_perl Guide ---> http://perl.apache.org
mailto:stas@stason.org http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org http://ticketmaster.com
--
Report problems: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html
List etiquette: http://perl.apache.org/maillist/email-etiquette.html
Re: Connection filters and Keep-Alive
Posted by Stas Bekman <st...@stason.org>.
Stas Bekman wrote:
> Mathias Herberts wrote:
>
>> Hi,
>>
>> still in the process of building an Input Connection Filter I noticed
>> something wrong with all Connection Filter examples I could find
>> (including HTTPHeadersFixup), in case the connection is instructed to
>> be kept open with 'Connection: Keep-Alive', several requests will be
>> run through the same instance of the filter, therefore it is not
>> possible to safely ignore the possible body of a POST (or DAV)
>> request. One must keep track of Content-Length and only ignore body if
>> 'Connection: close' was issued (as per RFC 2616).
>>
>> Anybody else aware of that?
>
>
> Not me. I'm still learning the topic ;) Thanks for the heads up,
> Mathias. I have never tried with 'Connection: Keep-Alive', though I
> think there must be a better way to tell separate requests from each
> other. I'll investigate this and get followup on this.
The net thrown in the httpd-dev sea came back empty. The fish is hiding behind
the rocks, scratching their private itches.
It seems that Apache provides no way to tell one request over another when
Keep-Alive is in effect. I need to look at the ap_discard_body function, since
somehow it knows when there is no more body to read.
Meanwhile I have the following filter tandem idea that may do the trick. We
could add a connection response filter, whose only purpose will be to set a
note in the connection object when it sees the response headers (I don't think
EOS is sent in the response stream) flagging the incoming filter mate that the
next time it's invoked it'll be a new request. That will only work if after
sending the headers, it's known that the request body is fully consumed. I
think that's the case, but I'm not 100% sure.
__________________________________________________________________
Stas Bekman JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/ mod_perl Guide ---> http://perl.apache.org
mailto:stas@stason.org http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org http://ticketmaster.com
--
Reporting bugs: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html
List etiquette: http://perl.apache.org/maillist/email-etiquette.html
Re: Connection filters and Keep-Alive
Posted by Stas Bekman <st...@stason.org>.
Mathias Herberts wrote:
> Hi,
>
> still in the process of building an Input Connection Filter I noticed
> something wrong with all Connection Filter examples I could find
> (including HTTPHeadersFixup), in case the connection is instructed to be
> kept open with 'Connection: Keep-Alive', several requests will be run
> through the same instance of the filter, therefore it is not possible to
> safely ignore the possible body of a POST (or DAV) request. One must
> keep track of Content-Length and only ignore body if 'Connection: close'
> was issued (as per RFC 2616).
>
> Anybody else aware of that?
Not me. I'm still learning the topic ;) Thanks for the heads up, Mathias. I
have never tried with 'Connection: Keep-Alive', though I think there must be a
better way to tell separate requests from each other. I'll investigate this
and get followup on this.
__________________________________________________________________
Stas Bekman JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/ mod_perl Guide ---> http://perl.apache.org
mailto:stas@stason.org http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org http://ticketmaster.com
--
Reporting bugs: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html