Better fix for https://issues.apache.org/bugzilla/show_bug.cgi?id=48660
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Tue, 2 Mar 2010 16:02:25 +0000 (16:02 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Tue, 2 Mar 2010 16:02:25 +0000 (16:02 +0000)
As per Konstantin's comments, ensure a single Vary header is used and take account of * if present

git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@918093 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/coyote/http11/Http11AprProcessor.java
java/org/apache/coyote/http11/Http11NioProcessor.java
java/org/apache/coyote/http11/Http11Processor.java

index 6d73e6e..4c35bf1 100644 (file)
@@ -1660,7 +1660,17 @@ public class Http11AprProcessor implements ActionHook {
             outputBuffer.addActiveFilter(outputFilters[Constants.GZIP_FILTER]);
             headers.setValue("Content-Encoding").setString("gzip");
             // Make Proxies happy via Vary (from mod_deflate)
-            headers.addValue("Vary").setString("Accept-Encoding");
+            MessageBytes vary = headers.getValue("Vary");
+            if (vary == null) {
+                // Add a new Vary header
+                headers.setValue("Vary").setString("Accept-Encoding");
+            } else if (vary.equals("*")) {
+                // No action required
+            } else {
+                // Merge into current header
+                headers.setValue("Vary").setString(
+                        vary.getString() + ",Accept-Encoding");
+            }
         }
 
         // Add date header
index 506cfd8..5c31372 100644 (file)
@@ -1159,7 +1159,17 @@ public class Http11NioProcessor extends AbstractHttp11Processor implements Actio
             outputBuffer.addActiveFilter(outputFilters[Constants.GZIP_FILTER]);
             headers.setValue("Content-Encoding").setString("gzip");
             // Make Proxies happy via Vary (from mod_deflate)
-            headers.addValue("Vary").setString("Accept-Encoding");
+            MessageBytes vary = headers.getValue("Vary");
+            if (vary == null) {
+                // Add a new Vary header
+                headers.setValue("Vary").setString("Accept-Encoding");
+            } else if (vary.equals("*")) {
+                // No action required
+            } else {
+                // Merge into current header
+                headers.setValue("Vary").setString(
+                        vary.getString() + ",Accept-Encoding");
+            }
         }
 
         // Add date header
index 9df0ac7..e74d3f9 100644 (file)
@@ -815,7 +815,17 @@ public class Http11Processor extends AbstractHttp11Processor implements ActionHo
             outputBuffer.addActiveFilter(outputFilters[Constants.GZIP_FILTER]);
             headers.setValue("Content-Encoding").setString("gzip");
             // Make Proxies happy via Vary (from mod_deflate)
-            headers.addValue("Vary").setString("Accept-Encoding");
+            MessageBytes vary = headers.getValue("Vary");
+            if (vary == null) {
+                // Add a new Vary header
+                headers.setValue("Vary").setString("Accept-Encoding");
+            } else if (vary.equals("*")) {
+                // No action required
+            } else {
+                // Merge into current header
+                headers.setValue("Vary").setString(
+                        vary.getString() + ",Accept-Encoding");
+            }
         }
 
         // Add date header