如果Vary的字段值是“*”,则表明未指定的参数不限于请求头(例如,客户端的网络地址),在响应表示的选择中起作用。“*”值不能由代理服务器生成;它可能仅由原始服务器生成。
14.45 ViaVia通用头字段必须被网关和代理使用,以用来在请求中指示用户代理和服务器之间的中间协议和接收者,在响应上指示源服务器和客户端之间的中间协议和接收者。它类似于RFC 822[9]的“Received”字段,用于跟踪消息转发,避免请求循环,以及识别请求/响应链上所有发送者的协议功能。
Via = "Via" ":" 1#( received-protocol received-by [ comment ] )
received-protocol = [ protocol-name "http://www.likecs.com/" ] protocol-version
protocol-name = token
protocol-version = token
received-by = ( host [ ":" port ] ) | pseudonym
pseudonym = token
接收协议指示服务器或客户端沿着请求/响应链的每个环节所接收的消息相关的协议版本。当消息被转发时,接收的协议版本被附加到Via字段的值上,以便关于上游应用程序的协议能力的信息对所有接收者保持可见。
协议名称是可选的,当且仅当它是“HTTP”时。接收方字段通常是随后转发消息的接收方服务器或客户端的主机和可选端口号。然而,如果真实主机被认为是敏感信息,它可以被化名取代。如果没有给出端口,则可以假定它是接收到的协议的默认端口。
多个Via字段值表示转发消息的每个代理或网关。每个接收方必须附加其信息,以便根据转发应用程序的序列对最终结果进行排序。
注释可以在Via头字段中使用,以标识接收方代理或网关的软件,类似于User-Agent和Server标头字段。但是,在传递字段中的所有注释都是可选的,并且可以在转发消息之前由任何接收者删除。
例如,可以将请求消息从HTTP/1.0用户代理发送到名为“fred”的内部代理,该代理使用HTTP/1.1将请求转发到nowhere.com的公共代理,该公共代理通过将请求转发到位于的源服务器来完成请求。由接收的请求将具有以下的Via头字段:
Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
默认情况下,代理和网关作为通过网络防火墙的门户不应该转发防火墙区域内的主机的名称和端口。只有显式启用该信息才能传播。如果没有启用,防火墙后面的任何主机的主机所接收的主机都应该用适当的化名替换。
对于对隐藏内部结构具有很强隐私要求的组织,代理可以将具有相同接收协议值的Via头字段条目的有序子序列组合到一个这样的条目中。例如,
Via: 1.0 ricky, 1.1 ethel, 1.1 fred, 1.0 lucy
可以缩减为
Via: 1.0 ricky, 1.1 mertz, 1.0 lucy
应用程序不应该组合多个条目,除非它们都在相同的组织控制之下,并且主机已经被假名取代。应用程序不能组合具有不同接收的协议值的条目。
14.46 WarningWarning通用头字段用于承载关于消息中可能未反映的消息的状态或转换的附加信息。此信息用于警告实体主体信息在缓存配置或转换中缺乏语义的透明度。
Warning头字段通过以下方式发送:
Warning = "Warning" ":" 1#warning-value
warning-value = warn-code SP warn-agent SP warn-text
[SP warn-date]
warn-code = 3DIGIT
warn-agent = ( host [ ":" port ] ) | pseudonym
; 服务器添加的名称或别名
; Warning头字段,用于调试
warn-text = quoted-string
warn-date = <"> HTTP-date <">
响应可能包含多个Warning头字段。
警告文本应该使用自然语言和字符集,对于接收响应的人类用户来说,这些语言和字符集最容易理解。此决策可以基于任何可用的知识,例如缓存或用户的位置、请求中的Accept-Language字段、响应中的Content-Language字段等。默认语言为英语,默认字符集为ISO-8859-1。
如果使用的字符集不是ISO-859-1,则必须使用RFC 2047(14)中描述的方法在警告文本中进行编码。
Warning头通常可以应用于任何消息,但是一些特定的警告代码对于缓存来说是特殊的,并且只能应用于响应消息。在任何现有的Warning标头之后都应该添加新的警告标题。缓存不能删除它收到的任何消息头。但是,如果缓存成功验证缓存条目,则应删除以前附加到该条目的任何Warning标头,除非为特定Warning代码指定。然后,必须在验证响应中添加任何Warning标头。换句话说,Warning标头是那些附加到最近的相关响应的标题。