You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2012/06/11 19:21:23 UTC

git commit: TAP5-1880: Disable GZip compression for HTTP/1.0

Updated Branches:
  refs/heads/5.3 7912c9971 -> cc5a1098e


TAP5-1880: Disable GZip compression for HTTP/1.0


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/cc5a1098
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/cc5a1098
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/cc5a1098

Branch: refs/heads/5.3
Commit: cc5a1098ed71b912c1b69dd7e57fbcefc14db185
Parents: 7912c99
Author: Howard M. Lewis Ship <hl...@apache.org>
Authored: Mon Jun 11 10:13:36 2012 -0700
Committer: Howard M. Lewis Ship <hl...@apache.org>
Committed: Mon Jun 11 10:21:06 2012 -0700

----------------------------------------------------------------------
 build.gradle                                       |    2 +-
 .../services/ResponseCompressionAnalyzerImpl.java  |   23 ++++++++++---
 .../services/ResponseCompressionAnalyzer.java      |   16 ++++----
 .../ResponseCompressionAnalyzerTest.groovy         |   26 +++++++++++++++
 4 files changed, 53 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/cc5a1098/build.gradle
----------------------------------------------------------------------
diff --git a/build.gradle b/build.gradle
index 6b002e8..c83793c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -12,7 +12,7 @@ project.ext.versions = [
   tapestry: "5.3.4-rc-6",
   jetty: "7.0.0.v20091005",
   tomcat: "6.0.30",
-  testng: "5.14.9",
+  testng: "6.5.2",
   easymock: "3.0",
   servletapi: "2.5",
   spock: "0.6-groovy-1.8"

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/cc5a1098/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResponseCompressionAnalyzerImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResponseCompressionAnalyzerImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResponseCompressionAnalyzerImpl.java
index 678a139..3e1ac6f 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResponseCompressionAnalyzerImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResponseCompressionAnalyzerImpl.java
@@ -1,4 +1,4 @@
-// Copyright 2009, 2010 The Apache Software Foundation
+// Copyright 2009, 2010, 2012 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -14,16 +14,15 @@
 
 package org.apache.tapestry5.internal.services;
 
-import java.util.Collection;
-
-import javax.servlet.http.HttpServletRequest;
-
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.internal.TapestryInternalUtils;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.services.ResponseCompressionAnalyzer;
 import org.apache.tapestry5.services.assets.CompressionAnalyzer;
 
+import javax.servlet.http.HttpServletRequest;
+import java.util.Collection;
+
 public class ResponseCompressionAnalyzerImpl implements ResponseCompressionAnalyzer
 {
     private final HttpServletRequest request;
@@ -32,6 +31,8 @@ public class ResponseCompressionAnalyzerImpl implements ResponseCompressionAnaly
 
     private final CompressionAnalyzer analyzer;
 
+    // configuration is left here for partial compatibility with end-user modules that contribute a value; they
+    // should contribute to CompressionAnalyzer instead.
     public ResponseCompressionAnalyzerImpl(HttpServletRequest request, CompressionAnalyzer analyzer, @Deprecated
     Collection<String> configuration, @Symbol(SymbolConstants.GZIP_COMPRESSION_ENABLED)
     boolean gzipCompressionEnabled)
@@ -44,17 +45,29 @@ public class ResponseCompressionAnalyzerImpl implements ResponseCompressionAnaly
     public boolean isGZipSupported()
     {
         if (!gzipCompressionEnabled)
+        {
             return false;
+        }
+
+        // TAP5-1880:
+        if (request.getProtocol() == "HTTP/1.0")
+        {
+            return false;
+        }
 
         String supportedEncodings = request.getHeader("Accept-Encoding");
 
         if (supportedEncodings == null)
+        {
             return false;
+        }
 
         for (String encoding : TapestryInternalUtils.splitAtCommas(supportedEncodings))
         {
             if (encoding.equalsIgnoreCase("gzip"))
+            {
                 return true;
+            }
         }
 
         return false;

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/cc5a1098/tapestry-core/src/main/java/org/apache/tapestry5/services/ResponseCompressionAnalyzer.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/ResponseCompressionAnalyzer.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/ResponseCompressionAnalyzer.java
index 407e55e..fdc43a8 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/ResponseCompressionAnalyzer.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/ResponseCompressionAnalyzer.java
@@ -1,4 +1,4 @@
-// Copyright 2009, 2011 The Apache Software Foundation
+// Copyright 2009, 2011, 2012 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -14,20 +14,20 @@
 
 package org.apache.tapestry5.services;
 
-import org.apache.tapestry5.ioc.annotations.UsesConfiguration;
 import org.apache.tapestry5.services.assets.CompressionAnalyzer;
 
 /**
  * Used to determine if the client supports GZIP compression of the response.
- * 
+ *
+ * @see ResponseCompressionAnalyzer
  * @since 5.1.0.0
  */
-@UsesConfiguration(String.class)
 public interface ResponseCompressionAnalyzer
 {
     /**
-     * Checks the Accept-Encoding request header for a "gzip" token.
-     * 
+     * Checks the Accept-Encoding request header for a "gzip" token. Ensures that the protocol is not "HTTP/1.0", which
+     * does not correctly support GZip encoding (in older Internet Explorer browsers).
+     *
      * @return true if gzip is supported by client
      */
     boolean isGZipSupported();
@@ -37,9 +37,9 @@ public interface ResponseCompressionAnalyzer
      * through a GZip filter consumes cycles and makes them larger.
      * <p/>
      * Contribute content type strings to the service's configuration to mark them as not compressable.
-     * 
+     *
      * @param contentType
-     *            the mime type of the content, such as "text/html" or "image/jpeg".
+     *         the mime type of the content, such as "text/html" or "image/jpeg".
      * @return true if compression is worthwhile
      * @deprecated Deprecated in Tapestry 5.3. This method is to be removed at a later date. The service's configuration
      *             is no longer used. Instead, contribute to and use {@link CompressionAnalyzer}.

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/cc5a1098/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ResponseCompressionAnalyzerTest.groovy
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ResponseCompressionAnalyzerTest.groovy b/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ResponseCompressionAnalyzerTest.groovy
new file mode 100644
index 0000000..dcc9998
--- /dev/null
+++ b/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ResponseCompressionAnalyzerTest.groovy
@@ -0,0 +1,26 @@
+package org.apache.tapestry5.internal.services
+
+import org.apache.tapestry5.ioc.test.TestBase
+import org.apache.tapestry5.services.ResponseCompressionAnalyzer
+import org.testng.annotations.Test
+
+import javax.servlet.http.HttpServletRequest
+
+class ResponseCompressionAnalyzerTest extends TestBase {
+
+  @Test
+  void "HTTP/1.0 protocol disables gzip compression"() {
+
+    HttpServletRequest request = newMock(HttpServletRequest)
+
+    expect(request.getProtocol()).andReturn("HTTP/1.0").once()
+
+    replay()
+
+    ResponseCompressionAnalyzer rca = new ResponseCompressionAnalyzerImpl(request, null, null, true)
+
+    assert rca.isGZipSupported() == false
+
+    verify()
+  }
+}