网上有朋友遇到Squid关于Vary头缓存问题,查了下以前的笔记:
一、现象
如需要缓存Vary头信息的Object,同一个URL,Squid会根据 Vary头定义的Request头信息 来缓存多份,而在做缓存刷新的时候,这些多的Object会删不干净(算是Bug)
关于Squid 的Vary缓存原理解释在这儿: http://blog.sina.com.cn/s/blog_68d83f050100m3x1.html
二、解决办法
1 目前 可以通过修改Squid源码来达到目的
已经有人在Squid2.6下测试成功: http://windtear.net/2008/07/squid_patch_accept-encoding_multi_cache.html
我测试过Sina的相关 缓存,无论在请求头中怎么修改,得到的缓存都一样
比如:
curl -H "Accept-Encoding: gzip,deflate" ;
curl -H "Accept-Encoding: deflate,gzip" ;
curl -H "Accept-Encoding: deflate , gzip" ;
2 有同事(在淘宝的) 提供了一个方法:cur -X PURGE -H "Accept-Encoding: gzip,deflate" http://xxxx/yyyy.jpg 可以删掉
但这不是完美的方案 。理论上"Accept-Encoding" 的Value 可以有很多(所以才会有多份缓存),Squid还是应该提供完全的解决方案