1、为什么浏览器要缓存
大致一想:浏览器缓存资源目的就是下次用的时候更快一些,用户更快打开页面。疑惑点:浏览器是怎么判断是否缓存某个文件,缓存多长时间等问题
2、http缓存分类
根据是否需要向服务器发送资源请求分为 强制缓存 和 协商缓存
强制缓存(控制字段):
HTTP1.0: Expires
HTTP1.1: Cache-Control
如果Expires 和 Cache-Control 两个字段以 Cache-Control为主
如下图:
过程:请求第二次发起 —- >浏览器根据Expires 和 Cache-Control 判断目标资源是否命中“强制缓存” —-> 如果命中,直接从缓存获取资源,不再与服务器请求资源
在HTTP/1.1中,Cache-Control
主要取值为:
public:所有内容都将被缓存(客户端和代理服务器都可缓存)
private:所有内容只有客户端可以缓存,Cache-Control
的默认取值
no-cache:客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定
no-store:所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存
max-age=xxx (xxx is numeric):缓存内容将在xxx秒后失效
must-revalidate: 强制浏览器严格遵守你设置的cache规则
proxy-revalidate: 强制proxy严格遵守你设置的cache规则
协商缓存:
如果强制缓存失效,就要考虑协商缓存了,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程,两种情况:1、协商缓存生效,返回304 ;2、协商缓存失效返回200和请求结果。
协商缓存的控制字段
HTTP1.1: last-modified 服务器相应请求时,返回该资源文件在服务器最后被修改的时间
总结下,强制缓存和协商缓存的逻辑见
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END