- 概述
http 缓存 就是浏览器缓存,机制是根据http的报文的缓存标识进行的,http的报文非为俩种:
1、 HTTP请求 Request 报文:请求行 - 请求头(通用信息头,请求头,实体头)- 请求报文主体
2、HTTP响应 Response 报文:状态行 - HTTP头(通用信息头,响应头,实体头)- 响应报文主体
注:通用信息头指的是请求和响应报文都支持的头域,分别为Cache-Control、Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via;实体头则是实体信息的实体头域,分别为Allow、Content-Base、Content-Encoding、Content-Language、Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、Etag、Expires、Last-Modified、extension-header。这里只是为了方便理解,将通用信息头,响应头/请求头,实体头都归为了HTTP头
缓存过程
浏览器与服务器通信的方式为应答模式,即是:浏览器发起HTTP请求 – 服务器响应该请求。浏览器在第一次发起求情得到结果后,会根据响应报文中的HTTP头的缓存标识决定缓存结果,是则将请求结果和缓存表示存到浏览器缓存中。
1、浏览器每次发起请求,都会先在浏览器缓存中查找该请求的结果以及缓存标识
2、浏览器每次拿到返回的请求结果都会将该结果和缓存标识存入浏览器缓存中
强制缓存 和 协商缓存
强制缓存
强制缓存就是向浏览器缓存查找该请求结果,并根据该结果的缓存规则来决定是否使用该缓存结果的过程,强制缓存的情况主要有三种
1、不存在该缓存结果和缓存标识,强制缓存失效,则直接向服务器发起请求(跟第一次发起请求一致)
2、存在该缓存结果和缓存标识,但是结果已经失效,强制缓存失效,则使用协商缓存
3、存在该缓存结果和缓存标识,且该结果没有还没有失效,强制缓存生效,直接返回该结果
控制强制缓存的字段分别是Expires(1.0)和Cache-Control(1.1),其中Cache-Conctrol的优先级比Expires高
协商缓存
协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程,协商缓存的情况主要有俩种
1、协商缓存生效,返回304
1、协商缓存失败,返回200和请求结果
Cache-Conctrol
(1)public:所有内容都将被缓存(客户端和代理服务器都可缓存)
(2)private:所有内容只有客户端可以缓存,Cache-Control的默认取值
(3)no-cache:客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定
(4)no-store:所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存
(5)max-age=xxx (xxx is numeric):缓存内容将在xxx秒后失效
网友评论