深入之浏览器缓存
浏览器的缓存
强缓存
经过一次请求后,将文件放在内存或磁盘中,下次不需要发送请求,直接从本地拿
-
缓存到内存
当进程(浏览器页面)结束后,内存中缓存会被释放掉
-
缓存到磁盘
会一直存在
Pragma和Expires和Cache-Control
-
Expires Http1.0
过期时间,对比浏览器时间,没有过期则使用缓存数据
缺点:由于系统时间可以修改,不准确
-
Cache-Control Http 1.1 通用的消息头字段,响应头和请求头都可以带上
no-cache 不缓存 响应头设置代表跳过强缓存,请求头中设置代表跳过缓存策略
no-store 不缓存响应数据 代表禁用一切缓存
max-age 失效时间,以秒为单位 max-age = 0 代表跳过强缓存
public 缓存可以共享
private 个人的,缓存不可以共享
-
协商缓存 (对比缓存)
发送请求,服务器先检查头部是否有缓存标识,有则命中协商缓存,返回304
-
If-Modified-Since / Last-Modified
响应头返回Last-Modified,
请求头带上 if-Modified-sSnce : 值是响应头的Last-Modified
-
If-None-Matched / Etag
Etag 服务器资源唯一的标志 http1.1
响应头返回Etag,
请求头带上 If-None-Matched : 值是响应头的Etag
有了Last-Modified为什么还要Etag?
-
Etag精准度到秒,如果短时间内频繁改动资源,操作会失效
-
有的文件会定时生成,内容一样,但是Last-Modified不一样
-
浏览器的刷新
-
正常的链接进入
先匹配强缓存,再匹配协商缓存
-
页面刷新或拿地址重新打开页面
跳过强缓存,发请求,匹配协商缓存
-
强制刷新
跳过缓存策略
-
勾选disable cache
请求头中设置 cache-control: no-cache 跳过缓存策略