「这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战」
一、什么是浏览器缓存
二、缓存位置
三、强缓存
四、协商缓存
五、浏览器缓存机制
优点:
-
降低服务器压力,节约带宽
-
减少延迟,访问速度更快
缺点:
实时性要求高的数据不适合用缓存
什么是浏览器缓存
Web缓存存在于服务器和客户端之间。Web缓存密切注视着服务器-客户端之间的通信,监控请求,并且把请求输出的内容(例如html页面、 图片和文件等静态资源)存储到本地,根据缓存规则是否使用缓存资源或者重新请求服务器资源
浏览器缓存(缓存方式)
浏览器缓存(Cache-Control)
1、max-age:资源被访问后的存活最大时间、 N(S)后失效、 计算方式 max-age = expires- date:
2、s-maxage: 只用于共享缓存,比如CDN缓存。与max-age 的区别是:max-age用于普通缓存,
而s-maxage用于代理缓存。如果存在s-maxage,则会覆盖max-age 和 Expires.
3、Expires:http1.0特性,文档过期的时间 例如Expires: Wed, 26 Jun 2019 05:10:38 GMT
5、no-cache:从字面意义上很容易误解为不缓存,但是no-cache代表不缓存过期的资源,缓存会向服务器进行有效
处理确认之后处理资源,更确切的说no-cache的目的就是为了防止从缓存中获取过期的资源。
5、no-store:no-store 彻底得禁用缓冲,本地和代理服务器都不缓冲,每次都从服务器获取
6、public:表示它既可以存在共享缓存,也可以被存在本地缓存。
7、private:表示它只应该存在本地缓存。
8、must-revalidate:必须与服务器进行验证才能访问缓存资源,先经过验证返回304,再访问缓存,如果
max-age,未过期要等过期后must-revalidate才能生效must-revalidate 遇到服务器故障无法使用,no-cache可以
继续使用本地缓存must-revalidate用在对事务要求比较严苛的情况下使用(比如支付)
9、max-stale:客户机可以接收超出max-age时间的响应消息,max-stale在请求设置中有效,在响应设置中无效
max-age和max-stale在请求中同时使用的情况下,缓存的时间可以为max-age和max-stale
浏览器缓存(缓存过程分析)
①内存缓存(from memory cache):内存缓存具有两个特点,分别是快速读取和时效性:
1、快速读取:内存缓存会将编译解析后的文件,直接存入该进程的内存中。
2、时效性:一旦该进程关闭,则该进程的内存则会清空。
浏览器缓存位置(举例)
②硬盘缓存(from disk cache):硬盘缓存则是直接将缓存写入硬盘文件中,读取缓存需要对该缓存存放
的硬盘文件进行I/O操作,然后重新解析该缓存内容,读取复杂,速度比内存缓存慢。
浏览器缓存位置(浏览器读取缓存的顺序)
1、先去内存看,如果有,直接加载
2、如果内存没有,择取硬盘获取,如果有直接加载
3、如果硬盘也没有,那么就进行网络请求
强制缓存
强制缓存就是向浏览器缓存查找该请求结果,并根据该结果的缓存规则来决定是否使用该缓存结果
的过程,强制缓存的情况主要有三种(暂不分析协商缓存过程)
1、没有缓存结果和缓存标识,
2、有缓存结果和缓存标识,且该结果尚未失效,
3、存在缓存结果和缓存标识,但该结果已失效
Cache-Control & Expires(强缓存缓存规则)
协商缓存规则
协商缓存的标识也是在响应报文的HTTP头中和请求结果一起返回给浏览器的,控制协商缓存的字段
分别有:
1、Last-Modified / If-Modified-Since
2、Etag / If-None-Match,
注:Etag 优先级高于Last-Modified,
同时存在则只有Etag / If-None-Match生效。
-
If-Modified-Since 把第一次请求 Last-Modified的值,作为下一次请求的值提交给服务器进行校验是否 过期,如果过期重新请求资源,返回200,并返回结果和缓存标示给客户端,否则返回304,直接读取本地资源 If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT
-
If-None-Match 把第一次请求 Etag的md5值,作为下一次请求的值提交给服务器进行校验内容是否修改过,如果修改过重新请求资源,返回200,并且把结果返回客户端,否则返回304,直接读取本地资源If-None-Match: “737060cd8c284d8af7ad3082f209582d”