浏览器的缓存机制 强制缓存 && 协商缓存

浏览器与服务器通信的方式为应答模式,即是:浏览器发起HTTP请求 – 服务器响应该请求。那么浏览器第一次向服务器发起该请求后拿到请求结果,会根据响应报文中HTTP头的缓存标识,决定是否缓存结果,是则将请求结果和缓存标识存入浏览器缓存中,简单的过程如下图:
浏览器的缓存机制 强制缓存 && 协商缓存_第1张图片
由上图我们可以知道:

1) 浏览器每次发起请求,都会先在浏览器缓存中查找该请求的结果以及缓存标识

2) 浏览器每次拿到返回的请求结果都会将该结果和缓存标识存入浏览器缓存中

以上两点结论就是浏览器缓存机制的关键,他确保了每个请求的缓存存入与读取,只要我们再理解浏览器缓存的使用规则,那么所有的问题就迎刃而解了。为了方便理解,这里根据是否需要向服务器重新发起HTTP请求将缓存过程分为两个部分,分别是强制缓存和协商缓存。

强制缓存

强制缓存就是向浏览器缓存查找该请求结果,并根据该结果的缓存规则来决定是否使用该缓存结果的过程。当浏览器向服务器发起请求时,服务器会将缓存规则放入HTTP响应报文的HTTP头中和请求结果一起返回给浏览器,控制强制缓存的字段分别是 Expires 和 Cache-Control,其中Cache-Control(缓存控制)优先级比Expires(期限)高。

强制缓存的情况主要有三种(暂不分析协商缓存过程),如下:

1)不存在该缓存结果和缓存标识,强制缓存失效,则直接向服务器发起请求(跟第一次发起请求一致)。

2)存在该缓存结果和缓存标识,但该结果已失效,强制缓存失效,则使用协商缓存。

3)存在该缓存结果和缓存标识,且该结果尚未失效,强制缓存生效,直接返回该结果
协商缓存

协商缓存

就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程,同样,协商缓存的标识也是在响应报文的HTTP头中和请求结果一起返回给浏览器的,控制协商缓存的字段分别有:Last-Modified(最后修改事件) / If-Modified-Since(如果修改) 和 Etag(实体标签) / If-None-Match(假如不匹配),其中Etag / If-None-Match的优先级比Last-Modified / If-Modified-Since高。协商缓存主要有以下两种情况:

1)协商缓存生效,返回304

2)协商缓存失效,返回200和请求结果结果

浏览器的缓存机制 强制缓存 && 协商缓存_第2张图片

你可能感兴趣的:(网络题,缓存,服务器,运维)