车东[Blog^2]: 利用Header机制隐掉Vary,提高Web缓存的命中率

| 暂无评论 | 暂无引用通告

Read Original article: 利用Header机制隐掉Vary,提高Web缓存的命中率 via 车东[Blog^2].

HTTP 1.1的规范建议所有的请求输出都包含Vary Header,目的是针对对前端缓存服务器,增加针对Vary制定的各种Header类型进行不同的缓存处理,在浏览器规格复杂的情况下,不利于缓存的命中,所以要在被缓存的服务器上设置:

Header unset Vary

问题是这样被发现的:最近使用Apache 2.2的内存缓存mod_mem_cache机制进行后台静态文件加速。但是总是发现命中率很低,几乎是缓而不存,而用了mod_disk_cache后,前端缓存目录空间增加非常快,以至于经常需要删除文件,而删除文件的I/O损失超过了直接访问后台访问的加速所得。后台明明只有几M模板图片和CSS文件,为什么缓存空间上G而且命中率那么低呢?查看了一下缓存目录下的文件,Apache的前端磁盘缓存就会根据浏览器除了针对内容的.data文件和.header文件外还有一个.vary目录:

Jqyw8OvBIlgaef7Zb8lQ.data
Jqyw8OvBIlgaef7Zb8lQ.header
Jqyw8OvBIlgaef7Zb8lQ.header.vary/

当遇到和原有Vary不同的Header时,会在 header.vary目录下生成更多的缓存;从Apache的讨论组上看原因就是IE的AcceptEncoding请求头信息里增加了一个空格
IE : Accept-Encoding: gzip, deflate
Firefox: Accept-Encoding: gzip,deflate

于是按照Fernando的方法,将后台的Vary Header禁掉了。缓存空间立刻停止了增长,也不再有Vary AcceptEncode 头输出了,这个头信息可能是后台使用压缩模块造成的吧;

记录一个调试缓存缓存用命令行看Header输出的方法:
curl -I 查看HTTP头信息;
查看缓存后输出结果:
curl -I http://www.example.com/foo.bar
查看缓存前的服务器输出:
curl -I -H "Host: www.example.com" http://ip.address.of.example/foo.bar

暂无引用通告

发送引用通告网址: http://blog.cnblog.org/cgi-bin/mt/cnblog-tb0801.cgi/3375
如果您想引用这篇日记到您的Blog,请复制上面的链接,放置到您发表文章时的相应界面中。

发表评论

关于此日记

此日记由 ReFeed Robot 发表于 2008年4月12日 09:07

此Blog上的上一篇日记Life 2.0: 义和团运动速考

此Blog上的下一篇日记中文网志年会: 投票:共同来决定2008年会的举办地

首页归档页可以看到最新的日记和所有日记。