From 32383d6fb77ec7acd2d14980917530ae619b75b2 Mon Sep 17 00:00:00 2001 From: markt Date: Tue, 2 Mar 2010 16:02:25 +0000 Subject: [PATCH] Better fix for https://issues.apache.org/bugzilla/show_bug.cgi?id=48660 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 | 12 +++++++++++- java/org/apache/coyote/http11/Http11NioProcessor.java | 12 +++++++++++- java/org/apache/coyote/http11/Http11Processor.java | 12 +++++++++++- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/java/org/apache/coyote/http11/Http11AprProcessor.java b/java/org/apache/coyote/http11/Http11AprProcessor.java index 6d73e6ef4..4c35bf1ce 100644 --- a/java/org/apache/coyote/http11/Http11AprProcessor.java +++ b/java/org/apache/coyote/http11/Http11AprProcessor.java @@ -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 diff --git a/java/org/apache/coyote/http11/Http11NioProcessor.java b/java/org/apache/coyote/http11/Http11NioProcessor.java index 506cfd8f4..5c313728e 100644 --- a/java/org/apache/coyote/http11/Http11NioProcessor.java +++ b/java/org/apache/coyote/http11/Http11NioProcessor.java @@ -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 diff --git a/java/org/apache/coyote/http11/Http11Processor.java b/java/org/apache/coyote/http11/Http11Processor.java index 9df0ac76d..e74d3f9e0 100644 --- a/java/org/apache/coyote/http11/Http11Processor.java +++ b/java/org/apache/coyote/http11/Http11Processor.java @@ -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 -- 2.11.0