缓存
缓存优点:减少冗余的数据传输;减轻服务器的压力;加快浏览器加载网页的速度。
分类:强缓存和协商缓存
强缓存:服务器不需要发送资源给客户端,客户端直接从缓存中取
有关头字段:Cache-Control、 Expires,两者同时存在时,前者优先级更高
Expires:当客户端向服务器发送请求,服务器返回资源的同时也返回响应头Expires,表示资源的过期具体时间;
是一个GMT格式的时间字符串,是一个绝对时间;
客户端再次请求这个资源,发送请求的时间在这个时间之前,本地缓存始终都有效,可以直接从缓存中取;
缺点:当服务器和客户端时间偏差较大时,会导致缓存混乱;当缓存时间过期之后,不论请求的资源有没有变化,服务器都会发送资源
Cache-Control:既可以出现在请求头,也可以出现在响应头。
服务器端参数:
参数 | 作用 |
max-age | 在多少秒内有效,是一个相对时间;当为0的时候就是不使用强缓存 |
s-maxage | 用于表示cahe服务器(cache CDN、缓存代理服务器)的缓存的有效时间,且只对public的缓存有效 |
no-cache | 不使用强缓存;即需要使用协商缓存 |
no-store | 禁止浏览器缓存数据,每次客户端请求该资源都需要向服务器请求,服务器每次都会返回完整的资源 |
public | 可以被所有用户缓存,包括中间代理服务器和终端用户 |
private | 是默认值;只允许终端用户缓存,不允许中间代理服务器缓存 |
客户端参数:
参数 | 作用 |
no-cache | 表示告知代理服务器不使用缓存,直接向源服务器请求资源 |
max-stale | 值为数字;表示在缓存过期多少秒之后,仍然使用缓存中的数据;例如:max-stale=5,表示客户端在代理服务器上拿缓存时,即使缓存过期了也不要紧,只要过期时间在5秒之内,就仍然从代理服务器上取 |
min-fresh | 值为数字;表示缓存一定要在过期多少秒之前的时间拿,否则拿不到 |
only-if-cached | 表示客户端只会接受代理服务器的缓存,不会接受源服务器的资源;如果代理服务器的缓存无效,则直接返回504 |
协商缓存:可以看作是当强缓存失效时,由服务器决定是否使用缓存
有关头字段:Etag和If-None-Match一组、Last-Modified和If-Modified-Since;同时存在时以前一组为主。
服务器返回状态码304,表示从缓存中获取资源。
头字段 | 请求头or响应头 | 作用 |
Last-Modified | 响应头 | 客户端第一次请求服务器时,服务器告诉客户端资源的最近修改时间 |
If-Modified-Since | 请求头 | 值等于服务器上一次返回的Last-Modified的值。客户端告诉服务器资源的最近修改时间 |
Etag | 响应头 | 资源标识 |
If-None-Match | 请求头 | 缓存资源标识。值就是上一次访问服务器时获得的Etag的值 |
Last-Modified和If-Modified-Since:
优点:当缓存没有过期时,服务器返回状态码304,不会返回资源,大大节省了流量和带宽,减轻了对服务器的压力
缺点:Last-Modified精确到秒,当在同一秒既修改又请求了资源,客户端获取不到最新的资源;如果只单纯编辑了但是没有更新内容,Last-Modified也会改变,导致缓存失效
Etag和If-None-Match:
Etag由文件内容的hash值和内容长度组成,只有当内容有更新时Etag的值才会改变;解决了文件修改时间精确到秒和编辑但不修改内容导致缓存失效的问题。
判断资源是否来自缓存
在Network面板的size列表中,memory cache表示来自内存缓存,disk cache表示来自硬盘缓存
memory cache和disk cache的区别在于存储位置和读取速度;memory cache读取速度比disk cache快;
memory cache特点:当前tab页关闭后,数据就不存在了,资源被释放掉;再次打开相同页面时,memory cache变成了disk cache
disk cache特点:关闭tab页甚至关闭浏览器后,数据都还在,再次打开仍然是来自disk cache
常用的缓存方案
HTML文档使用协商缓存;JS、CSS、图片等使用强缓存。
标签:HTTP,缓存,浏览器,cache,Modified,代理服务器,服务器,客户端 From: https://www.cnblogs.com/lxmblog/p/17233963.html