You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Nick Kew <ni...@webthing.com> on 2004/06/21 16:53:17 UTC

Aborting a filter.

I have a problem with mod_deflate's inflate filter (the one I wrote a
couple of months ago).  I've found a site that (repeatably) provides
compressed data that causes zlib to return -3 (data error). I hope I can
solve it by more detailed study of zlib, but it raises a broader issue.

The inflate-filter is error-handling in what seems an appropriate manner -
aborting the decompress and returning APR_EGENERAL.  But that then
propagates NOBODY_WROTE, and the client is getting unexpected end
of connection, which is not good.

The cop-out of a remove_output_filter and a pass_brigade is no use here,
as the error could be mid-stream, and the Content-Encoding header has
already been stripped in any case.

Instinctively I'd like to see the Client get a 500 errordoc in such cases.
But that's not an option mid-stream either.  OTOH, if it happens before
core_output_filter has got any data, is there any cleanup core can do
about this to improve the client experience?

Any thoughts?  Has this been discussed before?

-- 
Nick Kew

RE: Aborting a filter.

Posted by Nick Kew <ni...@webthing.com>.
On Tue, 22 Jun 2004, Peter J. Cranstone wrote:

> Thanks... we're currently testing a new version of mod_gzip called
> mod_gzip64i

For the record, I've fixed the problem.  It was a failure to support
some of the compression flags.  Now I'll have to (side?)port it into
a CVS version of mod_deflate ...

<grumble>Why isn't this documented in the manpages or in zlib.h</grumble>?

-- 
Nick Kew

RE: Aborting a filter.

Posted by "Peter J. Cranstone" <cr...@msn.com>.
Thanks... we're currently testing a new version of mod_gzip called
mod_gzip64i

It's specifically coded for Itanium at the moment - but we're seeing between
factor 2 - factor 3 performance improvement (you can now buy a single cpu
Itanium for less than $3500) and Apache runs just fine on it. (about 20% -
30% faster for a 1Ghz Itanium vs. a Pentium 2.4Ghz)

I'll check out the site and see if we have any problems.

Thanks,


Peter 

-----Original Message-----
From: Nick Kew [mailto:nick@webthing.com] 
Sent: Monday, June 21, 2004 11:17 PM
To: dev@httpd.apache.org
Subject: RE: Aborting a filter.

On Mon, 21 Jun 2004, Peter J. Cranstone wrote:

> Can you provide the name of the site?

www.dn.se

(one of a list of several hundred test sites used by my Client).

It's a slightly-dated Apache + mod_gzip, and if I capture the data,
gzip itself can uncompress it.

-- 
Nick Kew

RE: Aborting a filter.

Posted by Nick Kew <ni...@webthing.com>.
On Mon, 21 Jun 2004, Peter J. Cranstone wrote:

> Can you provide the name of the site?

www.dn.se

(one of a list of several hundred test sites used by my Client).

It's a slightly-dated Apache + mod_gzip, and if I capture the data,
gzip itself can uncompress it.

-- 
Nick Kew

RE: Aborting a filter.

Posted by "Peter J. Cranstone" <cr...@msn.com>.
Can you provide the name of the site?

Thanks,

Peter

-----Original Message-----
From: Nick Kew [mailto:nick@webthing.com] 
Sent: Monday, June 21, 2004 8:53 AM
To: apache-modules@covalent.net; dev@httpd.apache.org
Subject: Aborting a filter.


I have a problem with mod_deflate's inflate filter (the one I wrote a
couple of months ago).  I've found a site that (repeatably) provides
compressed data that causes zlib to return -3 (data error). I hope I can
solve it by more detailed study of zlib, but it raises a broader issue.

The inflate-filter is error-handling in what seems an appropriate manner -
aborting the decompress and returning APR_EGENERAL.  But that then
propagates NOBODY_WROTE, and the client is getting unexpected end
of connection, which is not good.

The cop-out of a remove_output_filter and a pass_brigade is no use here,
as the error could be mid-stream, and the Content-Encoding header has
already been stripped in any case.

Instinctively I'd like to see the Client get a 500 errordoc in such cases.
But that's not an option mid-stream either.  OTOH, if it happens before
core_output_filter has got any data, is there any cleanup core can do
about this to improve the client experience?

Any thoughts?  Has this been discussed before?

-- 
Nick Kew