From: Jim Jagielski Date: Mon, 29 Aug 2011 15:22:22 +0000 (+0000) Subject: Merge r958253 from trunk: X-Git-Tag: 2.2.20~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=65c7d2dbfc6c07c4040d685a62f743efb607848b;p=thirdparty%2Fapache%2Fhttpd.git Merge r958253 from trunk: Stop compressing if we are doing a HEAD request and the content-length filter can't determine the content-length anyway. Submitted by: Ruediger Pluem Submitted by: sf Reviewed/backported by: jim git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@1162858 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/STATUS b/STATUS index ae0564b7ebf..4ed2788d8be 100644 --- a/STATUS +++ b/STATUS @@ -92,12 +92,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - * mod_deflate: Stop compressing HEAD requests if there is not Content-Length - header - Trunk patch: http://svn.apache.org/viewvc?rev=958253&view=rev - 2.2.x patch: trunk patch works with offset - +1: sf, covener, jim - * mod_reqtimeout: Disable keep-alive after read timeout Trunk patch: http://svn.apache.org/viewvc?rev=1103213&view=rev 2.2.x patch: trunk patch works except for CHANGES diff --git a/modules/filters/mod_deflate.c b/modules/filters/mod_deflate.c index 07ca194f97d..7856e35fa87 100644 --- a/modules/filters/mod_deflate.c +++ b/modules/filters/mod_deflate.c @@ -582,6 +582,19 @@ static apr_status_t deflate_out_filter(ap_filter_t *f, apr_bucket *b; apr_size_t len; + /* + * Optimization: If we are a HEAD request and bytes_sent is not zero + * it means that we have passed the content-length filter once and + * have more data to sent. This means that the content-length filter + * could not determine our content-length for the response to the + * HEAD request anyway (the associated GET request would deliver the + * body in chunked encoding) and we can stop compressing. + */ + if (r->header_only && r->bytes_sent) { + ap_remove_output_filter(f); + return ap_pass_brigade(f->next, bb); + } + e = APR_BRIGADE_FIRST(bb); if (APR_BUCKET_IS_EOS(e)) {