Last-Modified
上次修改时间
配合If-Modified-Since或者If-Unmodified-Since使用
对比上次修改时间验证资源是否需要更新
ETag
数据签名
典型做法:对资源内容进行hash计算
配合If-Match或者Id-Non-Match使用
对比资源的签名判断是否使用缓存
缓存验证流程
在浏览器和服务端设置都允许缓存策略的前提下(服务端响应头的Cache-Control
不为no-store
,即禁止任何缓存),如果某个请求的响应头设置了Last-Modified
或Etag
:
- 第一次请求:浏览器会记住响应头的
Last-Modified
和Etag
; - 第二次及以后请求:浏览器会携带保存的
Last-Modified
和Etag
分别作为If-Modified-Since
和If-None-Match
放入请求头中携带过去,以此到服务端验证此次请求的资源是否过期或更新;服务端进行判断,若过期或更新,则返回新的资源,否则返回空即可,节省服务端消耗。
实例
node服务文件:server.js
// server.js
const http = require('http')
const fs = require('fs')
http.createServer(