浏览器缓存机制即是HTTP缓存机制
浏览器缓存机制根据HTTP报文的缓存标识进行,所以分析浏览器缓存机制之前,需要介绍下HTTP报文
一、HTTP报文分为2种,分别是HTTP请求报文,HTTP响应报文
1、HTTP请求报文 请求行 HTTP头(通用信息头,请求头,实体头) 请求报文主体(只有POST才有报文主体)
2、HTTP响应报文 状态行 HTTP头(通用信息头,响应头,实体头) 响应报文主体
二、缓存过程分析 浏览器与服务器通信方式为应答模式,即浏览器发起HTTP请求-服务器响应该请求
浏览器第一次向服务器发起该请求后拿到请求结果,会根据响应报文中HTTP头的缓存标识,决定是否缓存结果,是则将请求结果和缓存标识存入浏览器缓存中。
由上图我们可以知道
1、浏览器每次发起请求,都会先在浏览器缓存中查找该请求的结果以及缓存标识 2、浏览器每次拿到返回的请求结果都会将该结果和缓存标识存入浏览器缓存中
根据是否需要向服务器重新发起HTTP请求将缓存过程分为两部分,分别是强缓存和协商缓存
强缓存 不会向服务器发送请求,直接从缓存中读取。通过HTTP头属性:Expires,Cache-Control实现
协商缓存 强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程 设置HTTP Header的 Last-Modified和ETag
协商缓存生效,返回304和Not Modified 协商缓存失效,返回200和请求结果
强制缓存优先于协商缓存进行,若强制缓存(Expires和Cache-control)生效则直接使用缓存,若不生效则进行协商缓存(Last-Modified/If-Modified-Since和Etag/If-None-Match)
协商缓存由服务器决定是否使用缓存,若协商缓存失效,那么代表该请求的缓存失效,返回200,重新返回缓存和缓存标识,再存入浏览器缓存中;生效则返回304,继续使用缓存。