"Via"头字段表明了用户代理和服务器(请求时)或者源服务器和客户端(相应时)之间存在中间协议和接收者,类似于邮件(RFC5322的3.6.7节)中的“Received”头字段。Via可以用于追踪消息转发,避免请求循环,以及识别在请求/响应链上的发送者的协议功能。

     Via = 1#( received-protocol RWS received-by [ RWS comment ] )

     received-protocol = [ protocol-name "/" ] protocol-version
                         ; see Section 6.7
     received-by       = ( uri-host [ ":" port ] ) / pseudonym
     pseudonym         = token

多个Via字段值表示已经转发过消息的每个网关或者代理。每个中介添加它自己的关于信息如何被接收的信息,所以最后的结果是按照接收者转发序列排序的。

代理必须按下面描述地,在每个由它转发的消息中发送一个适当的Via头字段。一个HTTP到HTTP的网关必须在每个进站请求消息中发送一个适当的Via头字段,并且可以在被转发的响应消息中发送一个Via头字段。

对每个中介来说,接收到的协议表明了信息的上游发送者使用的协议和协议版本。因此,Via头字段值记录请求/响应链的广告协议能力,使得它们对下游收件人保持可见;这可以用于确定哪些向后不兼容的功能可以安全地用于响应,或者在稍后的请求中使用,如2.6节所述。为了方便,当接受协议是HTTP的时候协议名称将被忽略。

字段值的接收部分通常是随后转发消息的接收方服务器或客户机的主机和可选端口号。但是,如果真实主机名被认为是敏感信息,发送者可能用一个假名代替。如果端口没有提供,接收者可以认为是接受协议的默认端口。

发送者可以在Via头字段中生成注释以区分接收者的不同软件,类似于服务器头字段和User-Agent。但是,Via头字段中的所有注释都是可选的,并且接收者可以在转发消息前移除他们。

例如,一个请求消息可能被从HTTP/1.0的用户代理发送到内部代号为“fred”的代理,这个代理使用HTTP/1.1来转发请求到p.example.net上的公共代理,公共代理将通过转发消息到www.example.com的源服务器来完成这个请求。那么由www.example.com接收到的请求将有下列的Via头字段:

  Via: 1.0 fred, 1.1 p.example.net

通过网络防火墙作为门户网站的媒介不得转发防火墙区域内主机的名称和端口,除非明确启用。如果没有启用,这样的中介应当用适当的假名替换主机后面的任何主机。

如果条目具有相同的接收协议值,则中介可以将Via头部字段条目的有序子序列组合成单个这样的条目。例如:

   Via: 1.0 ricky, 1.1 ethel, 1.1 fred, 1.0 lucy

可以被合并为

     Via: 1.0 ricky, 1.1 mertz, 1.0 lucy

发件人不得组合多个条目,除非它们全部在相同的组织控制下,并且主机已经被假名替换。 发送者不得合并具有不同接收协议值的条目。

results matching ""

    No results matching ""