定义
请求的结果、甚至请求成功的状态,都会随着验证器与受影响资源的比较结果的变化而变化。
也就是比较服务器上存储的资源和当前请求通过首部带上的资源标记是否是同一个版本的。
这里提到的验证器主要有两类,分别为最后修改时间和实体标签。
资源的比较有两种的等值检查类型,分为两强验证类型和弱验证类型。
验证器
- 文件的最后修改时间(last-modified)
- 实体标签(etag)
验证类型
- 强验证类型(Strong validation),逐个字节比较
- 弱验证类型(Weak validation)
验证类型与验证器的类型是相互独立的,HTTP 默认使用的是强验证类型。
条件首部
- If-Match
- If-None-Match
- If-Modified-Since
- If-Unmodified-Since
- If-Range
应用场景
缓存更新
通过在请求头中追加 If-None-Match(对应响应的 Etag 值) 和 If-modified-Since(对应响应的 Last-Modified 值) 用来比较当前的资源版本和服务器上资源版本的区别
9_1.jpg 9_2.jpg 9_3.jpg
增量下载的完整性
在服务器带有 Accept-Ranges 响应头标记资源是可以增量下载的,客户端通过 If-Range 请求头和服务器资源比较,识别是相同资源在继续断点续传否则直接返回新的内容给客户端
9_4.jpg 9_5.jpg 9_6.jpg
使用乐观锁避免更新丢失问题
用于 wiki 等多人在线编辑场景,多人并发编辑同一个资源时候,服务器通过增加乐观锁机制,确保同时只有一个用户更新,其它用户的更新请求会比较资源版本,不一致则拒绝更新
9_7.png
网友评论