响应中的“ETag”头字段提供了被选表示的当前实体标签。实体标签是一个不透明验证器,它用来区分相同资源的多个不同表示而不管那些多个表示是否因为资源状态随时间改变,内容协商造成多个表示同时成为有效的。实体标签由一个不透明被引号包括的字符串,可能带有前导的弱指示符。

    1. ETag = entity-tag
    2. entity-tag = [ weak ] opaque-tag
    3. weak = %x57.2F ; "W/", case-sensitive
    4. opaque-tag = DQUOTE *etagc DQUOTE
    5. etagc = %x21 / %x23-7E / obs-text
    6. ; VCHAR except double quotes, plus obs-text

    注意:先前的不透明标签被定义为引号字符串(RFC2616,3.11节);因此,一些接收者可能进行反斜线转义。服务器因此应该避免实体标签中的反斜线字符。

    实体标签在一些情况下在验证方面会比修改时间更加可靠,如不方便存储修改日期,以秒为精度的HTTP日期不足够,或者修改时间不能保持一致。

    例子:

    1. ETag: "xyzzy"
    2. ETag: W/"xyzzy"
    3. ETag: ""

    实体标签可以是弱校验器也可能是强校验器,默认是强的。如果源服务器为一个表示提供了实体标签并且实体标签的产生没有满足强校验器的所有特性,那么源服务器必须通过它的不透明值的前导“W/”(区分大小写 )标记实体标签为弱的。