http缓存分为以下两种(两者都是通过response header控制缓存)
1.强制缓存
2.协商缓存
强制缓存
设置过期时间,时间未过期就从客户端缓存获取资源,无需再向服务器发送请求
cache-control: max-age=31536000, public, immutable
属性 | 备注 |
---|---|
max-age=31536000 | 有效期为31536000秒(1年) |
public | 客户端和代理服务器都可以缓存该资源(刷新后发起http请求) |
private | 只有客户端可缓存该资源(刷新后发起http请求) |
immutable | 刷新后不发起http请求 |
no-cache | 每次请求需要校验服务器资源的新鲜度 |
no-store | 彻底禁用缓存 |
某天,设置的这31536000秒过期了,此时会去请求服务器,但是文件依旧是最新的,此时会走协商缓存
协商缓存(对比缓存)
每次发送请求会在request header带上上次response header中的etag和last-modified,服务端进行对比etag和last-modified,根据etag和last-modified来判断资源是否有被修改
请求服务器 > 服务器对比资源是否被修改 > 未修改 > 返回304状态码 > 客户端用缓存的老资源
请求服务器 > 服务器对比资源是否被修改 > 修 改 > 返回200状态码(第一次请求客户端会记下max-age,etag和last-modified缓存信息)
etag: '61bc02f0-747'
last-modified: Fri, 17 Dec 2021 03:24:32 GMT
key | 备注 |
---|---|
etag | 更改文件时变化的唯一值 |
last-modified | 文件的修改时间精确到秒 |