Include Vary: Accept-Encoding when using gzip This is strongly encouraged to ensure caches only send a cached gzip response only to user agents that understand gzip encoding. Gitiles has been getting lucky due to most responses being uncached, or cached only on the end user's browser with ETag revalidation. We may in the future want to allow caching public resources that are anonymously available. Doing this fix now ensures we are not surprised later if we try to improve the HTTP caching headers. Change-Id: Ide66426c956813218d10bdad99af775ca6a5e2be
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java index 49c62df..2c94a27 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
@@ -374,6 +374,7 @@ private Writer newWriter(HttpServletRequest req, HttpServletResponse res) throws IOException { OutputStream out; if (acceptsGzipEncoding(req)) { + res.addHeader(HttpHeaders.VARY, HttpHeaders.ACCEPT_ENCODING); res.setHeader(HttpHeaders.CONTENT_ENCODING, "gzip"); out = new GZIPOutputStream(res.getOutputStream()); } else {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/Renderer.java b/gitiles-servlet/src/main/java/com/google/gitiles/Renderer.java index 8d04578..694a3c3 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/Renderer.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/Renderer.java
@@ -164,6 +164,7 @@ res.setCharacterEncoding("UTF-8"); byte[] data = newRenderer(templateName).setData(soyData).render().getBytes(UTF_8); if (BaseServlet.acceptsGzipEncoding(req)) { + res.addHeader(HttpHeaders.VARY, HttpHeaders.ACCEPT_ENCODING); res.setHeader(HttpHeaders.CONTENT_ENCODING, "gzip"); data = BaseServlet.gzip(data); }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/DocServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/DocServlet.java index 8c30e26..6561ada 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/DocServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/DocServlet.java
@@ -202,6 +202,7 @@ res.setCharacterEncoding(UTF_8.name()); setCacheHeaders(res); if (acceptsGzipEncoding(req)) { + res.addHeader(HttpHeaders.VARY, HttpHeaders.ACCEPT_ENCODING); res.setHeader(HttpHeaders.CONTENT_ENCODING, "gzip"); raw = gzip(raw); }