381521 set Vary:Accept-Encoding header for content that might be compressed

This commit is contained in:
Greg Wilkins 2012-06-05 17:31:24 +02:00
parent b9a3c98055
commit e093732d40
3 changed files with 8 additions and 4 deletions

View File

@ -234,9 +234,7 @@ public abstract class AbstractCompressedStream extends ServletOutputStream
if (_response.isCommitted()) if (_response.isCommitted())
throw new IllegalStateException(); throw new IllegalStateException();
setHeader("Content-Encoding", _encoding); setHeader("Content-Encoding", _encoding);
setHeader("Vary","Accept-Encoding");
if (_response.containsHeader("Content-Encoding")) if (_response.containsHeader("Content-Encoding"))
{ {
_out=_compressedOutputStream=createStream(); _out=_compressedOutputStream=createStream();

View File

@ -421,6 +421,9 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory
boolean gzip=false; boolean gzip=false;
if (!included.booleanValue() && _gzip && reqRanges==null && !endsWithSlash ) 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); String accept=request.getHeader(HttpHeaders.ACCEPT_ENCODING);
if (accept!=null && accept.indexOf("gzip")>=0) if (accept!=null && accept.indexOf("gzip")>=0)
gzip=true; gzip=true;
@ -497,7 +500,6 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory
if (gzip) if (gzip)
{ {
response.setHeader(HttpHeaders.CONTENT_ENCODING,"gzip"); response.setHeader(HttpHeaders.CONTENT_ENCODING,"gzip");
response.setHeader(HttpHeaders.VARY,HttpHeaders.ACCEPT_ENCODING);
String mt=_servletContext.getMimeType(pathInContext); String mt=_servletContext.getMimeType(pathInContext);
if (mt!=null) if (mt!=null)
response.setContentType(mt); response.setContentType(mt);

View File

@ -201,7 +201,11 @@ public class GzipFilter extends UserAgentFilter
{ {
HttpServletRequest request=(HttpServletRequest)req; HttpServletRequest request=(HttpServletRequest)req;
HttpServletResponse response=(HttpServletResponse)res; 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")); String compressionType = selectCompression(request.getHeader("accept-encoding"));
if (compressionType!=null && !response.containsHeader("Content-Encoding") && !HttpMethods.HEAD.equalsIgnoreCase(request.getMethod())) if (compressionType!=null && !response.containsHeader("Content-Encoding") && !HttpMethods.HEAD.equalsIgnoreCase(request.getMethod()))
{ {