From e093732d40dd5ee7c56070a81f5c760536e1cc65 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Tue, 5 Jun 2012 17:31:24 +0200 Subject: [PATCH] 381521 set Vary:Accept-Encoding header for content that might be compressed --- .../org/eclipse/jetty/http/gzip/AbstractCompressedStream.java | 4 +--- .../main/java/org/eclipse/jetty/servlet/DefaultServlet.java | 4 +++- .../src/main/java/org/eclipse/jetty/servlets/GzipFilter.java | 4 ++++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/gzip/AbstractCompressedStream.java b/jetty-http/src/main/java/org/eclipse/jetty/http/gzip/AbstractCompressedStream.java index 316bcb27cae..2b136cec6ab 100644 --- a/jetty-http/src/main/java/org/eclipse/jetty/http/gzip/AbstractCompressedStream.java +++ b/jetty-http/src/main/java/org/eclipse/jetty/http/gzip/AbstractCompressedStream.java @@ -234,9 +234,7 @@ public abstract class AbstractCompressedStream extends ServletOutputStream if (_response.isCommitted()) throw new IllegalStateException(); - setHeader("Content-Encoding", _encoding); - setHeader("Vary","Accept-Encoding"); - + setHeader("Content-Encoding", _encoding); if (_response.containsHeader("Content-Encoding")) { _out=_compressedOutputStream=createStream(); diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java index 378e490ddfc..31643879753 100644 --- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java +++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java @@ -421,6 +421,9 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory boolean gzip=false; if (!included.booleanValue() && _gzip && reqRanges==null && !endsWithSlash ) { + // Tell caches that response may vary by accept-encoding + response.setHeader(HttpHeaders.VARY,HttpHeaders.ACCEPT_ENCODING); + // Should we vary this response according to accept-encoding? String accept=request.getHeader(HttpHeaders.ACCEPT_ENCODING); if (accept!=null && accept.indexOf("gzip")>=0) gzip=true; @@ -497,7 +500,6 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory if (gzip) { response.setHeader(HttpHeaders.CONTENT_ENCODING,"gzip"); - response.setHeader(HttpHeaders.VARY,HttpHeaders.ACCEPT_ENCODING); String mt=_servletContext.getMimeType(pathInContext); if (mt!=null) response.setContentType(mt); diff --git a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/GzipFilter.java b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/GzipFilter.java index 8b9a9c76d3f..2837be9c97a 100644 --- a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/GzipFilter.java +++ b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/GzipFilter.java @@ -201,7 +201,11 @@ public class GzipFilter extends UserAgentFilter { HttpServletRequest request=(HttpServletRequest)req; HttpServletResponse response=(HttpServletResponse)res; + + // Inform caches that responses may vary according to Accept-Encoding + response.setHeader("Vary","Accept-Encoding"); + // Should we vary this response according to Accept-Encoding String compressionType = selectCompression(request.getHeader("accept-encoding")); if (compressionType!=null && !response.containsHeader("Content-Encoding") && !HttpMethods.HEAD.equalsIgnoreCase(request.getMethod())) {