缓存|缓存机制匹配流程

1.浏览器发送请求前,根据请求头的expires和cache-control判断是否命中强缓存策略,如果命中,直接从缓存获取资源,并不会发送请求。如果没有命中,则进入下一步。
2.没有命中强缓存规则,浏览器会发送请求,根据请求头的last-modified和etag判断是否命中协商缓存,如果命中,直接从缓存获取资源。如果没有命中,则进入下一步。
3.如果前两步都没有命中,则直接从服务端获取资源
强制缓存就是向浏览器缓存查找该请求结果,并根据该结果的缓存规则来决定是否使用该缓存结果的过程。强制缓存的情况主要有三种
1.第一次请求,不存在缓存结果和缓存标识,直接向服务器发送请求
2.存在缓存标识和缓存结果,但是已经失效,强制缓存失效,则使用协商缓存
3.存在该缓存结果和缓存标识,且该结果尚未失效,强制缓存生效,直接返回该结果
缓存规则:当浏览器向服务器发起请求时,服务器会将缓存规则放入HTTP响应报文的HTTP头中和请求结果一起返回给浏览器,控制强制缓存的字段分别是ExpiresCache-Control,其中Cache-Control优先级比Expires高。
Expires:缓存过期时间,用来指定资源到期的时间,是服务器端的具体的时间点。
Cache-Control:主要用于控制网页缓存
【缓存|缓存机制匹配流程】协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程,主要有以下两种情况:
1.协商缓存生效,返回304和Not Modified
2.协商缓存失效,返回200和请求结果
last-modified:浏览器首先发送一个请求,让服务端在response header中返回请求的资源上次更新时间,就是last-modified,浏览器会缓存下这个时间。
etag:是http协议提供的若干机制中的一种Web缓存验证机制,并且允许客户端进行缓存协商。生成etag常用的方法包括对资源内容使用抗碰撞散列函数,使用最近修改的时间戳的哈希值,甚至只是一个版本号。 和last-modified一样.
服务器会优先校验 Etag,如果 Etag 相等就会继续比对 Last-Modified,最后才会决定是否返回 304。
etag能够解决last-modified的一些缺点,但是etag每次服务端生成都需要进行读写操作,而last-modified只需要读取操作,从这方面来看,etag的消耗是更大的。
二者对比
精确度上:Etag要优于Last-Modified。
优先级上:服务器校验优先考虑Etag。
性能上:Etag要逊于Last-Modified

    推荐阅读