http_cache
Table of Contents
private cache <== 存在客户端主机上 public cache <== 存在缓存服务器上
缓存过期控制:
Cache-Control: max-age=484200 <== 多少秒 Expires: <date> <== 是一个时间, 类似 2015..
缓存验证:
If-Modified-Since: <date> <== 是一个时间, 类似 2015.., 对应服务器端的 Last-Modified If-None-Match: <etags> <== 缓存的唯一标识, 类似 hash, 对应服务器端的 Etag
还有两个条件请求
If-Match, If-None-Modified-Since
验证规则:
仅仅匹配日期是不够的
- 日期修改, 内容不会被修改
- 修改如果不是很重要
- 无法准确判断时间
..
- 如果服务器有 etags 标签, 客户端必须用实体标签验证 If-None-Match
- 如果服务器只有 Last-Modified 值, 客户端要使用 If-Modified-Since 验证
- 如果服务器两个都有提供, 客户端两个都要验证
弱验证和强验证:
弱验证
GET /index.html HTTP/1.1 If-None-Match: W/"v4.0" <== Weak
强验证: md5 校验和
Cache-Control:
请求: Client 请求 Server
no-store 不要返回缓存过的文档, 表示要真正的文档 no-cache 如果是缓存过的文档, 要先向 Server 验证一次, 再给 Client max-age=484200 存活时间, Expires max-stale 过期了无所谓 max-stale=484200 过期 484200 秒才可用, 超过这个时间就不要 min-fresh=484200 484200 秒后可用, 就继续使用这个缓存, 不然不要 only-if-cached 当缓存中有副本存在时, Client 才再次获得一份缓存 no-transform 文档在发送之前不允许被转换
响应: Server 响应 Client 的请求
public 响应可以被任何服务器缓存 private 响应可以被缓存, 但只能被单个 Client 访问 no-cache 如果该报文被另一个 缓存 Server 所保存, 缓存 Server 必须要重新验证才能给 Client no-store 响应不允许被缓存 no-tranform 响应在提供给 Client 之前, 不能做任何形式的修改 must-revalidate 响应在提供给 Client 之前, 必须要验证 proxy-revalidate 共享的缓存在提供给客户端之前必须重新向 Server 验证, 如果 Client 直接和 Server 连接可以忽略这个首部 max-age=484200 响应存活时间, Expires s-maxage 响应存活时间, 仅对 public cache 生效
html 控制缓存
<meta http-equiv="Cache-Control" content="no-cache">
http-equiv 控制 3 秒后跳转
<meta http-equiv="refresh" content="3;url=http://www.baidu.com">
apache 控制缓存
来源: http://blog.csdn.net/21aspnet/article/details/6604814
mod_headers
<ifmodule mod_headers.c> <filesmatch "\.(html|htm|txt)$"> header set cache-control "max-age=3600" </filesmatch> <filesmatch "\.(css|js|swf)$"> header set cache-control "max-age=604800" </filesmatch> <filesmatch "\.(ico|gif|jpg|jpeg|png|flv|pdf)$"> header set cache-control "max-age=29030400" </filesmatch> </ifmodule>
mod_expires
<IfModule mod_expires.c> ExpiresActive On ExpiresDefault A0 # 1 年 <FilesMatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$"> ExpiresDefault A9030400 </FilesMatch> # 1 星期 <FilesMatch "\.(jpg|jpeg|png|gif|swf)$"> ExpiresDefault A604800 </FilesMatch> # 3 小时 <FilesMatch "\.(txt|xml|js|css)$"> ExpiresDefault A10800 </FilesMatch> </IfModule>