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);
     }