之前只知道有浏览器缓存,确不知道到底什么是缓存,强缓存与协商缓存??? 一头雾水呀,今天俺就来好好的总结一下。。。
感谢https://www.cnblogs.com/chengxs/p/10396066.html 原文作者支持!
- 浏览器缓存介绍
浏览器的缓存机制也就是我们说的HTTP缓存,是根据HTTP报文的缓存标识进行的,
所以在分析之前,我们先使用图文简单介绍一下HTTP报文,分为两种:
HTTP请求报文,HTTP响应报文
浏览器与服务器通信的方式为应答模式,即是:浏览器发起HTTP请求 – 服务器响应该请求。那么浏览器第一次向服务器发起请求后拿到请求结果,会根据响应报文中HTTP头的缓存标识,决定是否缓存结果,是则将请求结果和缓存标识存入浏览器缓存中。。。
2. 强制缓存 与 协商缓存
强制缓存就是向浏览器缓存查找该请求结果,并根据该结果的缓存规则来决定是否使用该缓存结果的过程,
one 强制缓存标识不存在 内容不存在则,直接请求服务端,若存在则使用本地缓存
two 若缓存标识 存在 缓存内容过期或者不存在,则开始协商缓存,向服务器发送请求,如果成功,则返回304页面,失败则返回200,后端返回数据,页面重新加载。
3. 那么强制缓存的缓存规则是什么?
当浏览器向服务器发送请求的时候,服务器会将缓存规则放入HTTP响应的报文的HTTP头中和请求结果一起返回给浏览器,控制强制缓存的字段分别是Expires和Cache-Control,其中Cache-Conctrol的优先级比Expires高。 如下图:
注:在HTTP/1.1中现在cache-control 已经把 Expires取代了,并且如果同时设置,前者的优先级高于后者,Expires具有时区的问题。所以这里只说明cache-control...
在HTTP/1.1中,Cache-Control是最重要的规则,主要用于控制网页缓存,主要取值为:
(1)public:所有内容都将被缓存(客户端和代理服务器都可缓存)
(2)private:所有内容只有客户端可以缓存,Cache-Control的默认取值
(3)no-cache:客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定
(4)no-store:所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存
(5)max-age=xxx (xxx is numeric):缓存内容将在xxx秒后失效 这里取得是相对秒数
总结
强制缓存优先于协商缓存进行,若强制缓存(Expires和Cache-Control)生效则直接使用缓存,若不生效则进行协商缓存(Last-Modified / If-Modified-Since和Etag / If-None-Match),协商缓存由服务器决定是否使用缓存,若协商缓存失效,那么代表该请求的缓存失效,重新获取请求结果,再存入浏览器缓存中;生效则返回304,继续使用缓存