强制缓存(优先级较高)
开启时,当浏览器缓存中有内容时,客户端直接从浏览器缓存中取得数据
Expires
(http1.0)
- 到期时间,若再次请求时间小于返回的此时间,则直接使用缓存数据
- 但由于服务端时间和客户端时间不一定一致,会导致误差,现在一般用 cache-control 代替
Cache-Control
(优先级较高)
该值可以在请求中使用,也可以在响应中使用
请求
- no-cache,不使用缓存,需要再发起请求
- no-store,不保存到缓存
- max-age,接受缓存时间不大于该秒的资源
响应
- public,均需要进行缓存
- private,指定的用户可以缓存
- no-cache,不直接使用缓存,需要先去服务器做校验请求
- no-store,不能使用缓存
协商缓存
从缓存数据中取到一个缓存标识,将该标识发送给服务端检验是否失效,若没失效,返回 304,直接使用缓存;否则重新请求数据
Last-Modified
服务器在响应请求时,会告诉浏览器资源的最后修改时间
Last-Modified
浏览器再次请求时,会发送一个Last-Modified-since
,其值为刚才接受的Last-Modified
,服务器会进行比较,若比浏览器最后修改时间小,则返回新的资源和 200
Etag
(优先级较高)
etag 是服务器响应请求时,返回当前资源文件的唯一标示(服务器生成)
浏览器请求时,需要把etag
值写到if-none-match
中,服务器再进行比较。