缓存是一种提升浏览器性能和客户体验的一种手段。
主要提升了网站的加载速度,减少了服务器请求。
浏览器通过读取response header里面返回的内容决定缓存方式和是否缓存。
强制缓存
- 特点
不会发送网络请求,直接从浏览器中读取资源。 - 缓存方式
通过expires
expires是response header里的过期时间,返回的是一个时间戳。通过对比expires和本地时间来决定是否可以缓存。
通过cache-control属性
max-age: 60 // 单位是秒规定该缓存持续时间
-no-cache 不使用本地缓存。使用协商缓存。
-no-store 不缓存,每次都向服务器发送请求获取最新的资源。
-public 可以被cdn和中间服务代理商缓存。
-private 只可以被客户端缓存。
expries缺陷:由于对比的是本地时间。所以会发生不可预知的错误。
协商缓存
- 特点
在使用缓存之前需要向服务器发送网络请求,服务器根据response header的一些信息来判断是否命中协商缓存。(数据有没有更新)如果命中,则返还304状态码。
缓存方式
设置cache-control:-no-cache - last-modify
1.response header值里面会携带last-modify。里面是最后一次的修改时间。
2.再需要请求这个资源的时候会送 if-last-since 里面包含了last-modify的值。
3.服务器进行判断,是否需要更新当前资源。不需要就返还304。需要就返回最新资源。
4.浏览器接受到304会直接从本地缓存获取。 - Etag
etag根据文件名的hash值进行匹配是否需要发送最新资源。
last-modify缺陷:last-modify的修改时间是秒级别。所以毫秒级别里进行修改他是检测不到的。而etag是需要生成hash值。(听闻会对服务器造成压力:需要计算)