浏览器缓存-从无知到理解

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
喜欢就支持一下吧
点赞0 分享