最近忙于系统的产品化设计,为了寻找灵感重新复习一下操作系统,读到缓存算法一章时突然想起可以试用一下浏览器缓存。
还是以图片浏览为例,在同一个页面点击翻页链接以查看不同图片,每次都是向服务器发送请求,服务器根据路径信息将图片文件流写入JSP页面。
服务器使用Apache2.2 + Tomcat5.5,在访问页面时监控http头。第一次查看图片得到如下信息:
翻回曾经打开的页面时得到如下信息:
翻到过去页居然只有css文件使用了缓存!这实在让人不爽。打开缓存目录看看,JSP的“截止日期”和“最后修改日期”都是“无”,这就可以解释为什么没有用到浏览器缓存。
Apache的httpd.conf中默认不加载浏览器缓存模块,需要把#LoadModule expires_module modules/mod_expires.so的注释去掉;在mod_expires.xml中有如下说明:
<example>
ExpiresDefault "access plus 1 month"<br />
ExpiresDefault "access plus 4 weeks"<br />
ExpiresDefault "access plus 30 days"
</example>
这段说明简述了缓存配置。
在httpd.conf中添加expires_module模块:
<IfModule expires_module>
ExpiresActive On
ExpiresByType text/html "access plus 15 days 2 hours"
ExpiresDefault "access plus 1 month"
</IfModule>
重启apache。
这次重新翻回过去页时终于用上了浏览器缓存:
这里的缓存仅对超链接和“转到”有效,当使用F5刷新时,依然会重新与服务器确认,使用Ctrl+F5会重新下载所有信息。