For any cache, not just Varnish, the Accept-Encoding header used for the purge (or a regular cache hit) must match the request header /exactly/. If you use anything other than exactly "Accept-Encoding: gzip,deflate" your purge will miss. So this is the expected behavior, AFAIK.
Any other header specified in Vary must also match exactly for a hit (and optional purge) to occur. You could do some hashing hacks to augment the standard functionality, but it might become a bit of a mess. I haven't needed to find out, though. -- Ken On Feb 12, 2010, at 10:44 AM, John Norman wrote: > I think it's the backend's (Apache/Passenger) header: > > Vary: Accept-Encoding,User-Agent > > Which seems to prevent (???) this from working in my vcl_hash: > > if (req.http.Accept-Encoding ~ "gzip") { > set req.hash += "gzip"; > } // etc > > The Varnish doc says: "But by default, Varnish will perform no > transforms on the headers singled out by Vary: for comparison" > (http://varnish-cache.org/wiki/ArchitectureVary). > > So . . . I'm not sure what I should do. If the backend says "Vary" for > Accept-Encoding, does that mean that I should or should not be able to > access that header for the purposes of setting the hash? > > What I am observing is: > > browser makes request with Accept-Encoding: gzip,deflate > > When I try to purge, the request with the purge says: Accept-Encoding: > gzip,identity > > Even though "gzip" is in the request for both the browser > Accept-Encoding, and for the purge, they seem to be getting hashed > differently. > > If when I do a purge, I force Accept-Encoding: gzip,deflate, then it > matches what the browser did exactly, and I am able to purge > successfully. > > On Fri, Feb 12, 2010 at 11:54 AM, John Norman <j...@7fff.com> wrote: >> Here's a bit more on my "purge" problem -- a comparison of a purge >> that works on my development machine, vs. one that doesn't work on my >> staging system. >> >> On both, the browser request goes to haproxy, then to varnish. The VCL >> is identical, as quoted in a prior e-mail. The backends are different: >> on my local, it's the Ruby webrick server; on staging, it's >> Apache+Passenger. >> >> Again, I'm not purging through varnishadm: This is using the >> pseudo-http-method PURGE. >> >> One thing I can say about the staging environment if that if I do a >> non-browser request using mechanize from the staging system itself, >> then the later purge DOES work. In that case, the two differences are: >> The user-agent is the same for both the get and the purge; and >> requesting IP would be the same for both the get and the purge. >> >> Here are the log details. >> >> DEVELOPMENT -- first the browser request, showing the hit; then the >> purge, showing the hit. Awesome! >> >> 11 ReqStart c 127.0.0.1 50808 1691945259 >> 11 RxRequest c GET >> 11 RxURL c /products/sillyputty >> 11 RxProtocol c HTTP/1.1 >> 11 RxHeader c Host: localhost >> 11 RxHeader c User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS >> X 10.5; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 GTB7.0 >> 11 RxHeader c Accept: >> text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 >> 11 RxHeader c Accept-Language: en-us,en;q=0.5 >> 11 RxHeader c Accept-Encoding: gzip,deflate >> 11 RxHeader c Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 >> 11 RxHeader c Keep-Alive: 300 >> 11 RxHeader c Connection: close >> 11 RxHeader c Referer: http://localhost/ >> 11 RxHeader c Cookie: >> remember_token=f27172bfab54dc47d20b6d8c853afb8677fa2d11 >> 11 RxHeader c X-Forwarded-For: 127.0.0.1 >> 11 VCL_call c recv >> 11 VCL_return c lookup >> 11 VCL_call c hash >> 11 VCL_return c hash >> 11 Hit c 1691945214 >> 11 VCL_call c hit >> 11 VCL_return c deliver >> 11 Length c 201518 >> 11 VCL_call c deliver >> 11 VCL_return c deliver >> 11 TxProtocol c HTTP/1.1 >> 11 TxStatus c 200 >> 11 TxResponse c OK >> 11 TxHeader c Cache-Control: max-age=8280, public >> 11 TxHeader c X-Runtime: 818 >> 11 TxHeader c Content-Type: text/html; charset=utf-8 >> 11 TxHeader c Etag: "f29fbc0160d276fb97a298bf5bce8ff3" >> 11 TxHeader c Server: WEBrick/1.3.1 (Ruby/1.9.1/2009-07-16) >> 11 TxHeader c Content-Length: 201518 >> 11 TxHeader c Date: Fri, 12 Feb 2010 16:19:33 GMT >> 11 TxHeader c X-Varnish: 1691945259 1691945214 >> 11 TxHeader c Age: 14 >> 11 TxHeader c Via: 1.1 varnish >> 11 TxHeader c Connection: close >> 11 ReqEnd c 1691945259 1265991573.541040897 1265991573.547173977 >> 0.000077009 0.000055075 0.006078005 >> >> 11 ReqStart c ::1 51006 1691945309 >> 11 RxRequest c PURGE >> 11 RxURL c /products/sillyputty >> 11 RxProtocol c HTTP/1.1 >> 11 RxHeader c Accept: */* >> 11 RxHeader c User-Agent: WWW-Mechanize/1.0.0 >> (http://rubyforge.org/projects/mechanize/) >> 11 RxHeader c Connection: keep-alive >> 11 RxHeader c Keep-Alive: 300 >> 11 RxHeader c Accept-Encoding: gzip,identity >> 11 RxHeader c Accept-Language: en-us,en;q=0.5 >> 11 RxHeader c Host: localhost:8000 >> 11 RxHeader c Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 >> 11 VCL_call c recv >> 11 VCL_return c lookup >> 11 VCL_call c hash >> 11 VCL_return c hash >> 11 Hit c 1691945214 >> 11 VCL_call c hit >> 11 TTL c 1691945214 VCL 0 1265991617 >> 0 Debug - "VCL_error(200, Purged.)" >> 11 VCL_return c error >> 11 VCL_call c error >> 11 VCL_return c deliver >> 11 Length c 322 >> 11 VCL_call c deliver >> 11 VCL_return c deliver >> 11 TxProtocol c HTTP/1.1 >> 11 TxStatus c 200 >> 11 TxResponse c Purged. >> 11 TxHeader c Server: Varnish >> 11 TxHeader c Retry-After: 0 >> 11 TxHeader c Content-Type: text/html; charset=utf-8 >> 11 TxHeader c Content-Length: 322 >> 11 TxHeader c Date: Fri, 12 Feb 2010 16:20:16 GMT >> 11 TxHeader c X-Varnish: 1691945309 >> 11 TxHeader c Age: 0 >> 11 TxHeader c Via: 1.1 varnish >> 11 TxHeader c Connection: close >> 11 ReqEnd c 1691945309 1265991616.884471893 1265991616.884622097 >> 0.000173807 0.000099182 0.000051022 >> >> --------------------------------------- >> >> Now my problematic STAGING system -- first the GET with the hit, then >> the purge that fails to hit. >> >> 4 ReqStart c 10.253.191.95 45944 904319331 >> 4 RxRequest c GET >> 4 RxURL c /products/sillyputty >> 4 RxProtocol c HTTP/1.1 >> 4 RxHeader c Host: staging1.example.com >> 4 RxHeader c User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X >> 10.5; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 GTB7.0 >> 4 RxHeader c Accept: >> text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 >> 4 RxHeader c Accept-Language: en-us,en;q=0.5 >> 4 RxHeader c Accept-Encoding: gzip,deflate >> 4 RxHeader c Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 >> 4 RxHeader c Keep-Alive: 300 >> 4 RxHeader c Connection: keep-alive >> 4 RxHeader c Referer: http://staging1.example.com/ >> 4 RxHeader c Cookie: cehq-id=10.252.66.194.1263417178788050; >> __utma=240927894.185175319.1263417179.1265907679.1265923273.61; >> __utmz=240927894.1263591912.11.2.utmcsr=localhost:3000|utmccn=(referral)|utmcmd=referral|utmcct=/; >> __utma=229000926.194920698.1263480064.126592 >> 4 RxHeader c X-Forwarded-For: 75.150.106.113 >> 4 VCL_call c recv >> 4 VCL_return c lookup >> 4 VCL_call c hash >> 4 VCL_return c hash >> 4 Hit c 904319258 >> 4 VCL_call c hit >> 4 VCL_return c deliver >> 4 Length c 8471 >> 4 VCL_call c deliver >> 4 VCL_return c deliver >> 4 TxProtocol c HTTP/1.1 >> 4 TxStatus c 200 >> 4 TxResponse c OK >> 4 TxHeader c Server: Apache/2.2.12 (Ubuntu) >> 4 TxHeader c X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 2.2.9 >> 4 TxHeader c Cache-Control: max-age=8520, public >> 4 TxHeader c X-Runtime: 6052 >> 4 TxHeader c ETag: "94c1d0e1f26f0117dfc9bf3573a39f5a" >> 4 TxHeader c Status: 200 >> 4 TxHeader c Vary: Accept-Encoding,User-Agent >> 4 TxHeader c Content-Encoding: gzip >> 4 TxHeader c Content-Type: text/html; charset=utf-8 >> 4 TxHeader c Content-Length: 8471 >> 4 TxHeader c Date: Fri, 12 Feb 2010 16:07:58 GMT >> 4 TxHeader c X-Varnish: 904319331 904319258 >> 4 TxHeader c Age: 180 >> 4 TxHeader c Via: 1.1 varnish >> 4 TxHeader c Connection: keep-alive >> 4 ReqEnd c 904319331 1265990878.630007267 1265990878.630154371 >> 0.000055075 0.000094652 0.000052452 >> >> >> 4 ReqStart c 10.253.191.95 38696 904319371 >> 4 RxRequest c PURGE >> 4 RxURL c /products/sillyputty >> 4 RxProtocol c HTTP/1.1 >> 4 RxHeader c Accept: */* >> 4 RxHeader c User-Agent: WWW-Mechanize/1.0.0 >> (http://rubyforge.org/projects/mechanize/) >> 4 RxHeader c Connection: keep-alive >> 4 RxHeader c Keep-Alive: 300 >> 4 RxHeader c Accept-Encoding: gzip,identity >> 4 RxHeader c Accept-Language: en-us,en;q=0.5 >> 4 RxHeader c Host: staging1.example.com:8000 >> 4 RxHeader c Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 >> 4 VCL_call c recv >> 4 VCL_return c lookup >> 4 VCL_call c hash >> 4 VCL_return c hash >> 4 VCL_call c miss >> 0 Debug - "VCL_error(404, Not in cache.)" >> 4 VCL_return c error >> 4 VCL_call c error >> 4 VCL_return c deliver >> 4 Length c 340 >> 4 VCL_call c deliver >> 4 VCL_return c deliver >> 4 TxProtocol c HTTP/1.1 >> 4 TxStatus c 404 >> 4 TxResponse c Not in cache. >> 4 TxHeader c Server: Varnish >> 4 TxHeader c Retry-After: 0 >> 4 TxHeader c Content-Type: text/html; charset=utf-8 >> 4 TxHeader c Content-Length: 340 >> 4 TxHeader c Date: Fri, 12 Feb 2010 16:09:58 GMT >> 4 TxHeader c X-Varnish: 904319371 >> 4 TxHeader c Age: 0 >> 4 TxHeader c Via: 1.1 varnish >> 4 TxHeader c Connection: close >> 4 ReqEnd c 904319371 1265990998.368539810 1265990998.368721724 >> 0.000052691 0.000142813 0.000039101 >> > _______________________________________________ > varnish-misc mailing list > varnish-misc@projects.linpro.no > http://projects.linpro.no/mailman/listinfo/varnish-misc _______________________________________________ varnish-misc mailing list varnish-misc@projects.linpro.no http://projects.linpro.no/mailman/listinfo/varnish-misc