报文格式:
http请求报文:
请求行 http头 请求主体
http请求响应报文:
状态行 http头 响应主体
缓存过程
先请求浏览器缓存,如果成功则返回,否则发送http请求到服务端,查看是否可用服务端的缓存,有则返回(304),无则重新请求资源(200);
强制缓存(浏览器端缓存)
第一次发送http请求,首先查找浏览器中缓存和缓存标识,若两者均无转发送请求到服务端,若有混村但缓存标识过期,则继续发送http请求到服务端,若存在缓存且缓存标示未过期则直接返回数据。 (查看参考文档中示例图)
常用缓存策略:
- expires(放在http头中 HTTP/1)
第一次请求时响应头部返回保存在浏览器中的过期时间,是个固定时间值,只需查找请求时间是否超过该值。但是存在服务器与客户端时间不一致的影响
- cache-control (存放时长 HTTP/1.1)
可取多个值:
private
public
no-cache
no-store
max-age: 时长
浏览器缓存位置
from memory cache
存储在进程内存中的缓存,读写快,随进程中断而消失
from disk cache
存储在硬盘上,读写操作较慢,存在io操作,永久存储
协商缓存(服务端)
常用策略:
- last-modified/if-modified-since
- etag / if-none-match
后者优先级大禹前者;两对参数分别对应两种策略的响应头和请求头携带的参数。 第一种策略通过记录最后更新数据的时间来标识资源是否过期,后一种则通过唯一的标示etag来标识最新的资源状态值