“If-Match”头字段使得请求方法以收件人源服务武器为条件,当字段值使“*”时收件人源服务器有至少一个目标资源的当前表示,或收件人源服务器有一个具有实体标签的目标资源的当前表示,实体标签匹配字段值中提供的实体标签列表中的一个。

    当为If-Match比较实体标签时(2.3.2节),源服务器必须使用强校验函数,因为如果方法对表示数据有任何改变的话,客户端想要这个前提以阻止方法被应用。

    1. If-Match = "*" / 1#entity-tag

    例如:

    1. If-Match: "xyzzy"
    2. If-Match: "xyzzy", "r2d2xxxx", "c3piozzzz"
    3. If-Match: *

    If-Match最常被用于状态改变方法(如,POST,PUT,DELETE)以阻止当多个用户代理可能并行地操作同一个资源时意外的重写(即阻止“更新丢失”问题)。它也可以被用于安全方法以中断一个请求,如果被选表示不满足一个已经从先前的请求存储(或部分存储)的表示。

    接收到一个If-Match头字段的源服务器必须在执行方法前评估条件(第5节)。如果字段值是“*”,源服务器没有目标资源的当前表示,条件是假的。如果字段值是实体标签列表,列出的标签没有一个匹配被选表示的实体标签,条件是假的。

    如果被接收到的If-Match条件校验为假的,源服务器不得执行被请求的方法;作为替代,源服务器必须以412(前提失败)状态码或一个2xx(成功)状态码响应,如果源服务器已经验证一个状态改变正在被请求并且最终状态已经反映在目标资源的当前状态(即由用户代理请求的改变已经成功,但用户代理可能没有留意到它,或许因为先前的响应丢失了或一个其他用户代理做出了一个兼容的改变)。在后一种情况下,源服务器不得在响应中发送校验器头字段,除非它可以确认请求是相同用户代理的前一个改变的重复。

    If-Match头字段可能被缓存和中介忽略,因为它不适用缓存。