“If-None-Match”头字段使得接收者缓存或源服务器上的请求成为条件的,当字段值是“*”时他们没有目标资源的任何当前表示,或由一个与字段值中列出的任何实体标签都不匹配的被选表示。

    当为If-None-Match比较实体标签时,接收者必须使用弱比较函数,因为弱实体标签可以被用于缓存验证,即使表示数据被改变过。

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

    例子

    1. If-None-Match: "xyzzy"
    2. If-None-Match: W/"xyzzy"
    3. If-None-Match: "xyzzy", "r2d2xxxx", "c3piozzzz"
    4. If-None-Match: W/"xyzzy", W/"r2d2xxxx", W/"c3piozzzz"
    5. If-None-Match: *

    If-None-Match主要被用于条件的GET请求使的被缓存的信息能够以最小的交易开销进行高效更新。当客户端期望更新一个或多个有实体标签的被缓存响应时,客户端应该在进行GET请求时生成一个包含那些实体标签的列表的If-None-Match头字段;这允许接收者服务器能发送一个304(未修改)响应来指示这些被缓存的响应中的一个匹配了被选表示。

    当客户端认为资源没有当前表示的时候(RFC7231,4.2.1节),If-None-Match也可以使用“*”值来阻止一个非安全的请求方法(如PUT)不经意的修改一个目标资源的已存在的表示。如果不止一个客户端试图为目标资源创造一个初始表示,这是“更新丢失”问题的一个可能出现的变种。

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

    如果条件评估为假的,源服务器不得执行被请求的方法;作为替代,源服务器必须以304状态码响应(如果请求时GET或HEAD)或者412状态码响应(其他所有的请求方法)。

    缓存处理接收到的If-None-Match头字段的要求定义在RFC7234的4.3.2节。