1.减少荣誉的数据传输,节省你的网络费用。
2.缓解了网络瓶颈的问题。
3.降低了对原始服务器的要求。
4.缓存降低了距离时延。
命中和未命中
If-Modified-Since会放在GET首部,只有在缓存累对象的副本之后,有对其进行了修改的情况下,才发送此对象。
如果没变化,服务器会发送:
-
Status Code:304 Not Modified 响应
区分命中和未命中的情况
不幸的是,HTTP没有未用户提供一种手段俩区分响应是缓存命中的,还是访问原始服务器的。但是客户端有一种方法可以判断,Date首部,响应中的日期值比较早,通常认为是缓存响应。
层级缓存
一级,二级。。。
网状缓存,由代理根据URL进行转发
HTTP并不支持兄弟缓存,通过扩展协议,因特网缓存协议 ICP,超文本缓存协议HTCP。
缓存的处理步奏
1.接收
2.解析
3.查找
4.新鲜度检测(新鲜度算法)
5.创建响应
6.发送
7.日志
文档过期
Expires首部
Cache-control首部
判断
If-Modified-since:<date>
if-None-Match:<tags>
控制缓存
Cache-Control:
no-store 告诉服务器不缓存,并删除
no-cache 客户端会缓存
must-revalidate 在没有跟原始服务器进行在验证的情况下,不能将提供这个对象的陈旧副本。
max-age
试探性过期
LM-Factor算法
Web服务器的缓存设置
1.mod_headers
<IfModule mod_headers.c>
# htm,html,txt类的文件缓存一个小时
<filesmatch "\.(html|htm|txt)$">
header set cache-control "max-age=3600"
</filesmatch>
# css, js, swf类的文件缓存一个星期
<filesmatch "\.(css|js|swf)$">
header set cache-control "max-age=604800"
</filesmatch>
</IfModule>
2.modexpires 过期时间3.mod_cern_meta
HTTP-EQUIV控制HTML缓存
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-store, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
<META HTTP-EQUIV="expires" CONTENT="0">
这样做不好,因为服务器软件大多忽略处理这个。新鲜度算法
有兴趣可以研究
思考:怎么建立缓存服务器?