Making cachefu page purging work with vary headers : one solution nuke the Accept-Language <-- is this wise?

Rob Rogers robertbrogers at
Wed Mar 17 11:21:00 CET 2010

The issue:
html type pages (think objects in zope) cached in varnish, were not  
purged successfully with zope/plone/cachefu purging methods.
Images were purged. but html content was not.

Given we depend on caching pages in accelerator/zope/plone this is  a  
showstopper. (e.g. we use this:  cache-in-proxy-1-hour for (most) html  

In order to make purging work, I had to normalize or unset a couple  
http.req attributes. This is what I came up with.

The 'working' solution:
sub vcl_recv {
         if (req.http.Accept-Encoding) { /* lifted from varnish site */
           if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$") {
                         # No point in compressing these
             remove req.http.Accept-Encoding;
           } elsif (req.http.Accept-Encoding ~ "gzip") {
             set req.http.Accept-Encoding = "gzip";
           } elsif (req.http.Accept-Encoding ~ "deflate") {
             set req.http.Accept-Encoding = "deflate";
           } else {
                         # unkown algorithm
             remove req.http.Accept-Encoding;
         unset req.http.Accept-Language; /* is this DANGEROUS? */
         unset req.http.user-agent;
         set = "";

Based on what I have read, unsetting these attributes help keep  
multiple cache objects to a minimum.
Which is the reasoning behind normalizing the Accept-Encoding per

So, I guess I have 2 questions:
1) Given the site is only served in english, is there a danger of  
serving up the wrong hit for a browser with a different Accept-Language?
2) Will I still get purge misses for objects  cached by some browsers,  
like ones presenting deflate instead of gzip in the header?



More information about the varnish-misc mailing list