8.1.1.7 Via
Via头域指示传输事务的transport,并标记发送响应的目的地址。只有在选定请求消息通向下一跳的transport后,才将该值添加到Via头域中。
当UAC创建一个请求时,必须添加一个Via头域。其中协议名称和协议版本必须分别设置为SIP和2.0。Via头域必须包含一个branch参数,用于标记该请求创建的会话(transaction)。客户端和服务器均使用该branch参数值。
除non-2xx响应触发的CANCEL、ACK外,branch参数值必须在UA发出的所有请求中,保持唯一性。CANCEL请求应该与其要取消的请求拥有相同的branch值。如17.1.1.3所讨论,non-2xx消息的ACK也应该与对应的INVITE消息有相同的branch值。
一个合法的branch ID必须以"z9hG4bK"开头。这7个字符作为幻数,当服务器收到请求时可以根据这个值确认branch ID是按照规范来创建的。除此之外,更详细的branch格式由实现定义。
Via头域的maddr、ttl、send-by在传输层处理时赋值。
代理服务器对Via的处理在16.6节的第八个主题和16.7节的第三个主题描述。
8.1.1.8 Contact
Contact头域提供一个URI或URIS,后续请求可以根据这个值找到UA中的指定实例。在任何可以触发建立会话的请求消息中,都必须准确的包含一个SIP、或者SIPS URI。在该文档定义的方法中,仅包括INVITE消息。对这些请求来说,Contac