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

Reply via email to