Running ProxyPass with mod_deflate results in an extraneous 20 bytes being tacked onto 304 responses from the backend.
The problem is that mod_deflate doesn't handle the zero byte body, adds the gzip header and tries to compress 0 bytes.
This patch detects the fact that there was no data to compress and removes the gzip header from the bucket brigade.
Any comments before I commit to head?
Allan ------------------------------ Index: mod_deflate.c =================================================================== RCS file: /home/cvs/httpd-2.0/modules/filters/mod_deflate.c,v retrieving revision 1.49 diff -u -d -b -r1.49 mod_deflate.c --- mod_deflate.c 1 Jun 2004 13:06:10 -0000 1.49 +++ mod_deflate.c 9 Jun 2004 16:38:30 -0000 @@ -433,6 +433,8 @@ char *buf; unsigned int deflate_len;
+ if (ctx->stream.total_in != 0) { + ctx->stream.avail_in = 0; /* should be zero already anyway */ for (;;) { deflate_len = c->bufferSize - ctx->stream.avail_out; @@ -510,6 +512,14 @@ * Time to pass it along down the chain. */ return ap_pass_brigade(f->next, ctx->bb); + } + else { + /* this was a zero length response, remove gzip header bucket then pass down the EOS */ + APR_BUCKET_REMOVE(APR_BRIGADE_FIRST(ctx->bb)); + APR_BUCKET_REMOVE(e); + APR_BRIGADE_INSERT_TAIL(ctx->bb, e); + return ap_pass_brigade(f->next, ctx->bb); + } }
if (APR_BUCKET_IS_FLUSH(e)) {