最近,对HTTP缓存一些相关知识有些遗忘,对Cache-Control、Expires、If-Modified-Since等首部有些混淆等,重新查阅了相关知识并记录如下。
对一条HTTP GET报文的缓存处理主要为一下7个步骤:
- 接收——缓存从网络中读取抵达的请求报文。
- 解析——缓存对报文进行解析,提取出URL和各种首部。
- 查询——缓存查看是否有本地副本可用,如果没有,就获取一份副本并将其保存在本地。
- 新鲜度检测——缓存查看已缓存副本是否足够新鲜,如果不是,就询问服务器是否有任何更新。
- 创建响应——缓存会用新的首部和已缓存的主体来构建一条响应报文。
- 发送——缓存通过网络将响应发送给客户端。
- 日志——缓存可选地创建一个日志文件条目来描述这个事务。
【文档过期】通过Cache-Control首部和Expires首部,HTTP让原始服务器向每个文档附加了一个“过期日期”。在缓存文档过期之前,缓存可以以任何频率使用这些副本,而无须与服务器联系。Expires首部和Cache-Control:max-age首部所做的事情本质上是一样的,那么为啥HTTP会有这两个头部?