I might be getting this all wrong but doesn't the Content-Lenght require mod_deflate to run? for the correct lenght to be set?

On 7/17/06, Ian Holsman < [EMAIL PROTECTED]> wrote:
personally I think GET & HEAD processing should be identical until
the very last moment.
this avoids bugs creeping in which process the body for some reason
and add a header after mod_deflate is run
(I can't think of any which do this BTW)

are you seeing a problem somewhere Ruediger?

regards
Ian
On 18/07/2006, at 3:28 AM, Ruediger Pluem wrote:

> The following patch avoids that the deflate output filter wastes
> cycles in
> compressing the body of a header only request that gets thrown away
> by http
> header filter afterwards anyway.
> OTH a HEAD and a GET request differ regarding regarding the T-E and
> C-L headers
> (everything else is the same). So I am not sure if this patch
> breaks RFC2616.
>
> Comments?
>
> Index: modules/filters/mod_deflate.c
> ===================================================================
> --- modules/filters/mod_deflate.c       (Revision 422739)
> +++ modules/filters/mod_deflate.c       (Arbeitskopie)
> @@ -397,8 +397,6 @@
>
>          /* We're cool with filtering this. */
>          ctx = f->ctx = apr_pcalloc(r->pool, sizeof(*ctx));
> -        ctx->bb = apr_brigade_create(r->pool, f->c->bucket_alloc);
> -        ctx->buffer = apr_palloc(r->pool, c->bufferSize);
>
>          zRC = deflateInit2(&ctx->stream, c->compressionlevel,
> Z_DEFLATED,
>                             c->windowSize, c->memlevel,
> @@ -418,11 +416,6 @@
>              return ap_pass_brigade(f->next, bb);
>          }
>
> -        /* add immortal gzip header */
> -        e = apr_bucket_immortal_create(gzip_header, sizeof
> gzip_header,
> -                                       f->c->bucket_alloc);
> -        APR_BRIGADE_INSERT_TAIL(ctx->bb, e);
> -
>          /* If the entire Content-Encoding is "identity", we can
> replace it. */
>          if (!encoding || !strcasecmp(encoding, "identity")) {
>              apr_table_setn(r->headers_out, "Content-Encoding",
> "gzip");
> @@ -432,6 +425,24 @@
>          }
>          apr_table_unset(r->headers_out, "Content-Length");
>
> +        /*
> +         * Do not waste cycles on compressing bodys of header only
> requests as
> +         * the body data is dumped later anyway.
> +         */
> +        if (r->header_only) {
> +            deflateEnd(&ctx->stream);
> +            ap_remove_output_filter(f);
> +
> +        }
> +
> +        ctx->bb = apr_brigade_create(r->pool, f->c->bucket_alloc);
> +        ctx->buffer = apr_palloc(r->pool, c->bufferSize);
> +
> +        /* add immortal gzip header */
> +        e = apr_bucket_immortal_create(gzip_header, sizeof
> gzip_header,
> +                                       f->c->bucket_alloc);
> +        APR_BRIGADE_INSERT_TAIL(ctx->bb, e);
> +
>          /* initialize deflate output buffer */
>          ctx->stream.next_out = ctx->buffer;
>          ctx->stream.avail_out = c->bufferSize;
>           return ap_pass_brigade(f->next, bb);
>
>
>
> Regards
>
> RĂ¼diger
> Index: modules/filters/mod_deflate.c
> ===================================================================
> --- modules/filters/mod_deflate.c     (Revision 422739)
> +++ modules/filters/mod_deflate.c     (Arbeitskopie)
> @@ -397,8 +397,6 @@
>
>          /* We're cool with filtering this. */
>          ctx = f->ctx = apr_pcalloc(r->pool, sizeof(*ctx));
> -        ctx->bb = apr_brigade_create(r->pool, f->c->bucket_alloc);
> -        ctx->buffer = apr_palloc(r->pool, c->bufferSize);
>
>          zRC = deflateInit2(&ctx->stream, c->compressionlevel,
> Z_DEFLATED,
>                             c->windowSize, c->memlevel,
> @@ -418,11 +416,6 @@
>              return ap_pass_brigade(f->next, bb);
>          }
>
> -        /* add immortal gzip header */
> -        e = apr_bucket_immortal_create(gzip_header, sizeof
> gzip_header,
> -                                       f->c->bucket_alloc);
> -        APR_BRIGADE_INSERT_TAIL(ctx->bb, e);
> -
>          /* If the entire Content-Encoding is "identity", we can
> replace it. */
>          if (!encoding || !strcasecmp(encoding, "identity")) {
>              apr_table_setn(r->headers_out, "Content-Encoding",
> "gzip");
> @@ -432,6 +425,24 @@
>          }
>          apr_table_unset(r->headers_out, "Content-Length");
>
> +        /*
> +         * Do not waste cycles on compressing bodys of header only
> requests as
> +         * the body data is dumped later anyway.
> +         */
> +        if (r->header_only) {
> +            deflateEnd(&ctx->stream);
> +            ap_remove_output_filter(f);
> +            return ap_pass_brigade(f->next, bb);
> +        }
> +
> +        ctx->bb = apr_brigade_create(r->pool, f->c->bucket_alloc);
> +        ctx->buffer = apr_palloc(r->pool, c->bufferSize);
> +
> +        /* add immortal gzip header */
> +        e = apr_bucket_immortal_create(gzip_header, sizeof
> gzip_header,
> +                                       f->c->bucket_alloc);
> +        APR_BRIGADE_INSERT_TAIL(ctx->bb, e);
> +
>          /* initialize deflate output buffer */
>          ctx->stream.next_out = ctx->buffer;
>          ctx->stream.avail_out = c->bufferSize;




--
~Jorge

Reply via email to