相应中的“Vary”头字段描述了除了方法、Host头字段和请求目标之外的请求消息中的哪个部分可能影响源服务器对选择和表示这个响应的处理。其值由一个星号或一个头字段名(不区分大小写)的列表组成。

    1. Vary = "*" / 1#field-name

    “*”的Vary字段值表示请求的任何内容可能在选择和响应表示中产生作用,可能包括消息语法之外的元素(例如,客户端的网络地址)。接收者将不能决定这个响应对之后的请求是否合适而不需要将请求转发到源服务器。代理不得生成带有一个“*”值的Vary字段。

    由逗号分隔的名称列表组成的Vary字段值指示命名的请求头字段(称为选择头字段)可能在选择表示中具有作用。潜在的选择头字段不限制在本规范定义的那些头字段中。

    例如,一个响应可能包含

    1. Vary: accept-encoding, accept-language

    表明源服务器在选择这个响应的内容时可能已经使用了请求的Accept-Encoding和Accept-Language字段(或缺少)作为决定因素。

    源服务器可能因为两个原因发送带有字段列表的Vary:

    1. 告知缓存接受则他们不得使用这个响应来满足后续的请求,除非后续请求列出的字段值与原始请求相同(RFC7234,4.1节)。换句话说,Vary扩展了要求匹配一个新请求到已存储实体的缓存键。
    2. 通知用户代理接收者这个响应需要进行内容协商(5.3节),并且如果在列出的头部字段中提供了附加参数(主动协商),则可能会在后续请求中发送不同的表示。

    一个源服务器应该发送一个Vary头域,当其选择一个表示的算法根据除了方法和请求目标之外的请求消息的各个方面而变化,除非方差不能交叉,或者原始服务器被有意地配置为防止缓存透明。例如,没有必要在Vary中发送Authorization字段,因为跨用户的重用受限于字段定义(RFC7235,4.2节)。同样,源服务器可能使用Cache-Control指令(RFC7234,5.2节)来取代Vary,如果它认为在缓存上变动的影响小于Vary碰撞的执行开销。