因为浏览器和服务器之间的通信方式是应答模式,在浏览器第一次向服务器发起请求之后拿到请求结果,会根据响应报文中的 HTTP 头的缓存标识来决定是否需要缓存结果。
那缓存又分为强缓存和协商缓存.
通过设置 header 的 Expires 和 Cache-Control 来实现
max-agepublicprivateno-cacheno-store一般协商缓存的请求都会提示是
from memory cache或者from disk cache,内存会优先,使用内存一般是刷新页面的情况,此时进行没有关闭。
强缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程,如果协商缓存生效返回 304,不生效返回 200。 相关的缓存标识有两对,分别是
Last-ModifiedIf-Modified-Since
客户端发起请求的时候带上上一次返回的 Last-Modified 的值通过 If-Modified-Since,服务器收到之后根据该值与该资源在服务器最后被修改时间做对比,如果当前服务器资源最后修改时间大于 If-Modifed-Since 字段,则重新返回资源,并返回 200,反之则返回 304,告诉浏览器可以继续使用缓存资源
Etag(优先级高)If-None-Match当既没有 max-age,也没有 exprires,浏览器会依然请求缓存内容,而不是请求服务器。他的策略机制是根据当前头的 Date 和 Last-Modified 的时间差值,取 10%作为缓存时间周期。