Author: markt Date: Fri Apr 17 08:43:34 2009 New Revision: 765902 URL: http://svn.apache.org/viewvc?rev=765902&view=rev Log: Revert r765727 (fix for https://issues.apache.org/bugzilla/show_bug.cgi?id=46538) - it fixes the reported issue but introduces other issues.
Modified: tomcat/trunk/java/org/apache/coyote/http11/Constants.java tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java Modified: tomcat/trunk/java/org/apache/coyote/http11/Constants.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Constants.java?rev=765902&r1=765901&r2=765902&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/Constants.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/Constants.java Fri Apr 17 08:43:34 2009 @@ -148,10 +148,7 @@ 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). Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java?rev=765902&r1=765901&r2=765902&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java Fri Apr 17 08:43:34 2009 @@ -1486,9 +1486,16 @@ /** - * 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 @@ || (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 @@ 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 @@ ((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 @@ 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 Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java?rev=765902&r1=765901&r2=765902&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java Fri Apr 17 08:43:34 2009 @@ -1529,9 +1529,16 @@ /** - * 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 @@ || (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 @@ 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 @@ } } - 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 @@ 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 Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java?rev=765902&r1=765901&r2=765902&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java Fri Apr 17 08:43:34 2009 @@ -1399,9 +1399,16 @@ /** - * 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 @@ || (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 @@ 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 @@ 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 @@ 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 --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org