From: markt Date: Fri, 17 Apr 2009 08:43:34 +0000 (+0000) Subject: Revert r765727 (fix for https://issues.apache.org/bugzilla/show_bug.cgi?id=46538... X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=e00bf0c3a2d566aaa68f67928e67d1f9d828ebc3;p=tomcat7.0 Revert r765727 (fix for https://issues.apache.org/bugzilla/show_bug.cgi?id=46538) - it fixes the reported issue but introduces other issues. git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@765902 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/coyote/http11/Constants.java b/java/org/apache/coyote/http11/Constants.java index 048611511..ff07a60d1 100644 --- a/java/org/apache/coyote/http11/Constants.java +++ b/java/org/apache/coyote/http11/Constants.java @@ -148,10 +148,7 @@ public final class Constants { ByteChunk.convertToBytes("400"); public static final byte[] _404_BYTES = ByteChunk.convertToBytes("404"); - public static final String VARY = "Vary"; - public static final String VARY_UNSPECIFIED = "*"; - public static final String ACCEPT_ENCODING = "Accept-Encoding"; - public static final String ETAG = "ETag"; + /** * Identity filters (input and output). diff --git a/java/org/apache/coyote/http11/Http11AprProcessor.java b/java/org/apache/coyote/http11/Http11AprProcessor.java index 2b369161c..227678594 100644 --- a/java/org/apache/coyote/http11/Http11AprProcessor.java +++ b/java/org/apache/coyote/http11/Http11AprProcessor.java @@ -1486,9 +1486,16 @@ public class Http11AprProcessor implements ActionHook { /** - * Check if browser allows compression + * Check for compression */ - private boolean isCompressableBrowser() { + private boolean isCompressable() { + + // Nope Compression could works in HTTP 1.0 also + // cf: mod_deflate + + // Compression only since HTTP 1.1 + // if (! http11) + // return false; // Check if browser support gzip encoding MessageBytes acceptEncodingMB = @@ -1498,7 +1505,15 @@ public class Http11AprProcessor implements ActionHook { || (acceptEncodingMB.indexOf("gzip") == -1)) return false; - // If force mode, always compress (test purposes only) + // Check if content is not allready gzipped + MessageBytes contentEncodingMB = + response.getMimeHeaders().getValue("Content-Encoding"); + + if ((contentEncodingMB != null) + && (contentEncodingMB.indexOf("gzip") != -1)) + return false; + + // If force mode, allways compress (test purposes only) if (compressionLevel == 2) return true; @@ -1515,23 +1530,8 @@ public class Http11AprProcessor implements ActionHook { return false; } } - return true; - } - - /* - * Check if response allows compression - */ - private boolean isCompressableResponse() { - - // Check if content is not already gzipped - MessageBytes contentEncodingMB = - response.getMimeHeaders().getValue("Content-Encoding"); - - if ((contentEncodingMB != null) - && (contentEncodingMB.indexOf("gzip") != -1)) - return false; - // Check if sufficient length to trigger the compression + // Check if suffisant len to trig the compression long contentLength = response.getContentLengthLong(); if ((contentLength == -1) || (contentLength > compressionMinSize)) { @@ -1598,35 +1598,18 @@ public class Http11AprProcessor implements ActionHook { ((Long) request.getAttribute("org.apache.tomcat.sendfile.end")).longValue(); } } - - MimeHeaders headers = response.getMimeHeaders(); - + // Check for compression boolean useCompression = false; if (entityBody && (compressionLevel > 0) && (sendfileData == null)) { - if (isCompressableResponse()) { - // Always send the Vary header when response could be compressed - MessageBytes varyHeader = headers.getValue(Constants.VARY); - if (varyHeader == null) { - headers.addValue(Constants.VARY).setString( - Constants.ACCEPT_ENCODING); - } else { - if (varyHeader.indexOf(Constants.ACCEPT_ENCODING) == -1 && - !varyHeader.equals(Constants.VARY_UNSPECIFIED)) { - varyHeader.setString(varyHeader.toString() + "," + - Constants.ACCEPT_ENCODING); - } - } - } - - useCompression = isCompressableBrowser(); - + useCompression = isCompressable(); // Change content-length to -1 to force chunking if (useCompression) { response.setContentLength(-1); } } + MimeHeaders headers = response.getMimeHeaders(); if (!entityBody) { response.setContentLength(-1); } else { @@ -1662,22 +1645,8 @@ public class Http11AprProcessor implements ActionHook { if (useCompression) { outputBuffer.addActiveFilter(outputFilters[Constants.GZIP_FILTER]); headers.setValue("Content-Encoding").setString("gzip"); - - // Ensure eTag for compressed content is different to eTag for - // uncompressed content - MessageBytes eTagHeader = headers.getValue(Constants.ETAG); - if (eTagHeader != null) { - String eTag = eTagHeader.toString(); - int len = eTag.length(); - if (len > 1 && eTag.charAt(len - 1) == '"') { - // Add compression marker before closing quote - eTag = eTag.substring(0, len -1) + "-gz\""; - } else { - // Unquoted ETag - shouldn't happen - TODO complain - eTag = eTag + "-gz"; - } - eTagHeader.setString(eTag); - } + // Make Proxies happy via Vary (from mod_deflate) + headers.setValue("Vary").setString("Accept-Encoding"); } // Add date header diff --git a/java/org/apache/coyote/http11/Http11NioProcessor.java b/java/org/apache/coyote/http11/Http11NioProcessor.java index 3110553b5..93f5d2c92 100644 --- a/java/org/apache/coyote/http11/Http11NioProcessor.java +++ b/java/org/apache/coyote/http11/Http11NioProcessor.java @@ -1529,9 +1529,16 @@ public class Http11NioProcessor implements ActionHook { /** - * Check if browser allows compression + * Check for compression */ - private boolean isCompressableBrowser() { + private boolean isCompressable() { + + // Nope Compression could works in HTTP 1.0 also + // cf: mod_deflate + + // Compression only since HTTP 1.1 + // if (! http11) + // return false; // Check if browser support gzip encoding MessageBytes acceptEncodingMB = @@ -1541,7 +1548,15 @@ public class Http11NioProcessor implements ActionHook { || (acceptEncodingMB.indexOf("gzip") == -1)) return false; - // If force mode, always compress (test purposes only) + // Check if content is not allready gzipped + MessageBytes contentEncodingMB = + response.getMimeHeaders().getValue("Content-Encoding"); + + if ((contentEncodingMB != null) + && (contentEncodingMB.indexOf("gzip") != -1)) + return false; + + // If force mode, allways compress (test purposes only) if (compressionLevel == 2) return true; @@ -1558,23 +1573,8 @@ public class Http11NioProcessor implements ActionHook { return false; } } - return true; - } - - /* - * Check if response allows compression - */ - private boolean isCompressableResponse() { - - // Check if content is not already gzipped - MessageBytes contentEncodingMB = - response.getMimeHeaders().getValue("Content-Encoding"); - if ((contentEncodingMB != null) - && (contentEncodingMB.indexOf("gzip") != -1)) - return false; - - // Check if sufficient length to trigger the compression + // Check if suffisant len to trig the compression long contentLength = response.getContentLengthLong(); if ((contentLength == -1) || (contentLength > compressionMinSize)) { @@ -1639,33 +1639,19 @@ public class Http11NioProcessor implements ActionHook { } } - MimeHeaders headers = response.getMimeHeaders(); + // Check for compression boolean useCompression = false; if (entityBody && (compressionLevel > 0) && (sendfileData == null)) { - if (isCompressableResponse()) { - // Always send the Vary header when response could be compressed - MessageBytes varyHeader = headers.getValue(Constants.VARY); - if (varyHeader == null) { - headers.addValue(Constants.VARY).setString( - Constants.ACCEPT_ENCODING); - } else { - if (varyHeader.indexOf(Constants.ACCEPT_ENCODING) == -1 && - !varyHeader.equals(Constants.VARY_UNSPECIFIED)) { - varyHeader.setString(varyHeader.toString() + "," + - Constants.ACCEPT_ENCODING); - } - } - } - useCompression = isCompressableBrowser(); - + useCompression = isCompressable(); // Change content-length to -1 to force chunking if (useCompression) { response.setContentLength(-1); } } + MimeHeaders headers = response.getMimeHeaders(); if (!entityBody) { response.setContentLength(-1); } else { @@ -1701,22 +1687,8 @@ public class Http11NioProcessor implements ActionHook { if (useCompression) { outputBuffer.addActiveFilter(outputFilters[Constants.GZIP_FILTER]); headers.setValue("Content-Encoding").setString("gzip"); - - // Ensure eTag for compressed content is different to eTag for - // uncompressed content - MessageBytes eTagHeader = headers.getValue(Constants.ETAG); - if (eTagHeader != null) { - String eTag = eTagHeader.toString(); - int len = eTag.length(); - if (len > 1 && eTag.charAt(len - 1) == '"') { - // Add compression marker before closing quote - eTag = eTag.substring(0, len -1) + "-gz\""; - } else { - // Unquoted ETag - shouldn't happen - TODO complain - eTag = eTag + "-gz"; - } - eTagHeader.setString(eTag); - } + // Make Proxies happy via Vary (from mod_deflate) + headers.setValue("Vary").setString("Accept-Encoding"); } // Add date header diff --git a/java/org/apache/coyote/http11/Http11Processor.java b/java/org/apache/coyote/http11/Http11Processor.java index da489c932..7eed3fc19 100644 --- a/java/org/apache/coyote/http11/Http11Processor.java +++ b/java/org/apache/coyote/http11/Http11Processor.java @@ -1399,9 +1399,16 @@ public class Http11Processor implements ActionHook { /** - * Check if browser allows compression + * Check for compression */ - private boolean isCompressableBrowser() { + private boolean isCompressable() { + + // Nope Compression could works in HTTP 1.0 also + // cf: mod_deflate + + // Compression only since HTTP 1.1 + // if (! http11) + // return false; // Check if browser support gzip encoding MessageBytes acceptEncodingMB = @@ -1411,7 +1418,15 @@ public class Http11Processor implements ActionHook { || (acceptEncodingMB.indexOf("gzip") == -1)) return false; - // If force mode, always compress (test purposes only) + // Check if content is not allready gzipped + MessageBytes contentEncodingMB = + response.getMimeHeaders().getValue("Content-Encoding"); + + if ((contentEncodingMB != null) + && (contentEncodingMB.indexOf("gzip") != -1)) + return false; + + // If force mode, allways compress (test purposes only) if (compressionLevel == 2) return true; @@ -1428,23 +1443,8 @@ public class Http11Processor implements ActionHook { return false; } } - return true; - } - - /* - * Check if response allows compression - */ - private boolean isCompressableResponse() { - - // Check if content is not already gzipped - MessageBytes contentEncodingMB = - response.getMimeHeaders().getValue("Content-Encoding"); - if ((contentEncodingMB != null) - && (contentEncodingMB.indexOf("gzip") != -1)) - return false; - - // Check if sufficient length to trigger the compression + // Check if suffisant len to trig the compression long contentLength = response.getContentLengthLong(); if ((contentLength == -1) || (contentLength > compressionMinSize)) { @@ -1495,34 +1495,18 @@ public class Http11Processor implements ActionHook { contentDelimitation = true; } - MimeHeaders headers = response.getMimeHeaders(); - // Check for compression boolean useCompression = false; if (entityBody && (compressionLevel > 0)) { - if (isCompressableResponse()) { - // Always send the Vary header when response could be compressed - MessageBytes varyHeader = headers.getValue(Constants.VARY); - if (varyHeader == null) { - headers.addValue(Constants.VARY).setString( - Constants.ACCEPT_ENCODING); - } else { - if (varyHeader.indexOf(Constants.ACCEPT_ENCODING) == -1 && - !varyHeader.equals(Constants.VARY_UNSPECIFIED)) { - varyHeader.setString(varyHeader.toString() + "," + - Constants.ACCEPT_ENCODING); - } - } - } - - useCompression = isCompressableBrowser(); - + useCompression = isCompressable(); + // Change content-length to -1 to force chunking if (useCompression) { response.setContentLength(-1); } } + MimeHeaders headers = response.getMimeHeaders(); if (!entityBody) { response.setContentLength(-1); } else { @@ -1558,22 +1542,8 @@ public class Http11Processor implements ActionHook { if (useCompression) { outputBuffer.addActiveFilter(outputFilters[Constants.GZIP_FILTER]); headers.setValue("Content-Encoding").setString("gzip"); - - // Ensure eTag for compressed content is different to eTag for - // uncompressed content - MessageBytes eTagHeader = headers.getValue(Constants.ETAG); - if (eTagHeader != null) { - String eTag = eTagHeader.toString(); - int len = eTag.length(); - if (len > 1 && eTag.charAt(len - 1) == '"') { - // Add compression marker before closing quote - eTag = eTag.substring(0, len -1) + "-gz\""; - } else { - // Unquoted ETag - shouldn't happen - TODO complain - eTag = eTag + "-gz"; - } - eTagHeader.setString(eTag); - } + // Make Proxies happy via Vary (from mod_deflate) + headers.setValue("Vary").setString("Accept-Encoding"); } // Add date header