網上有朋友遇到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還是應該提供完全的解決方案