The current behaviour of mod_deflate is to set the Vary: Accept-Encoding 
header dependant on the fact, whether the client sent Accept-Encoding: gzip 
or not.

However, I think, that behaviour is not correct. At the time, the DEFLATE 
filter is activated, the resource actually /does/ vary on Accept-Encoding. 
Independant from what the client accepts or not. The attached patch moves 
the Vary header setting to the time before the filter checks the supplied 
Accept-Encoding but after the time, it checks whether the stream is already 
compressed (and probably already correct labeled with a Vary header).

nd
-- 
die (eval q-qq:Just Another Perl Hacker
:-)

# André Malo, <http://www.perlig.de/> #
Index: mod_deflate.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/filters/mod_deflate.c,v
retrieving revision 1.24
diff -u -r1.24 mod_deflate.c
--- mod_deflate.c       30 Aug 2002 16:31:17 -0000      1.24
+++ mod_deflate.c       9 Nov 2002 22:38:50 -0000
@@ -306,6 +306,8 @@
             }
         }
 
+        apr_table_setn(r->headers_out, "Vary", "Accept-Encoding");
+
         /* if they don't have the line, then they can't play */
         accepts = apr_table_get(r->headers_in, "Accept-Encoding");
         if (accepts == NULL) {
@@ -369,7 +371,6 @@
         else {
             apr_table_mergen(r->headers_out, "Content-Encoding", "gzip");
         }
-        apr_table_setn(r->headers_out, "Vary", "Accept-Encoding");
         apr_table_unset(r->headers_out, "Content-Length");
 
         /* initialize deflate output buffer */

Reply via email to