浏览器缓存
强缓存
Cache-Control 相对时间,Expires 绝对时间
Cache-Control 参数:
可缓存性
public
表明响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等)缓存private
表明响应只能被单个用户缓存,不能作为共享缓存(即代理服务器不能缓存它)no-cache
不使用强缓存,但有协商缓存no-store
不使用任何缓存
过期
max-age=<seconds>
缓存存储的最大周期,超过这个周期被认为过期
重新验证和重新加载
must-revalidate
如页面过期,则去服务器进行获取
其他
-
only-if-cached
不进行网络请求,完全只使用缓存 -
immutable
表示响应 的内容是不可变的,即使在过期之后也不能更改
协商缓存
【注意】 强缓存没用命中会走协商缓存,直接开启协商缓存的办法是 Cache-Control 设置为 no-cache
Last-Modified、If-Modified-Since
GMT 格式的时间字符串,代表的是文件的最后修改时间
- 响应头 Last-Modified 告诉浏览器资源的最后修改时间
- 请求时 If-Modified-Since 带上 Last-Modified 的时间
- 服务端进行对比,如果一致,则返回 304;如果已经修改,则返回资源和 200
缺点:
- 服务器资源可能在秒级内改动,协商缓存就无法生效
- 服务器与客服端时间可能不一致
Etag、If-None-Match
Etag 如何生成
使用哈希函数对资源内容进行计算,除了资源内容还可以包括资源最后修改时间、大小等元信息。
为什么需要缓存
- 减少了服务器的负担,提高了网站的性能
- 加快了客户端网页的加载速度
- 减少了多余网络数据传输