OPTIONS是SIP协议中基本的请求方法之一。由RFC3261定义,OPTIONS方法允许用户代理/终端查询另一个用户代理/终端或SIP服务器提供的能力,所有的SIP用户代理都要实现对该方法的处理。
实际应用场景如下:
1. 查询对端能力
这个机制允许客户端查询到服务端支持的方法、内容类型、扩展,编码等信息,在查询过程中不会触发响铃或其它机制提醒对方用户。所有的用户代理/终端必须支持OPTIONS方法。其中一个应用场景,客户端准备在INVITE请求中插入一个强制需要的头域,又不确认对端是否支持该头域时,可以通过OPTIONS查询对方支持的头域列表进行确认。
2. NAT会话保活
使用UDP作为传输方式时,通过定时(比如10秒)发送OPTIONS请求来刷新NAT保活
3. 检测对端状态
通过定时向对端发送OPTIONS消息,来检测对端服务是否存活。返回200表示正常,返回其它(503等)表示对端异常
4. 探测客户端到达目的端需要经过的SIP网元数量
RFC3261规定,服务端收到了Max-Forwards为0的OPTIONS请求时,可以忽略请求URI对应的最终目的地址,直接对该OPTIONS请求作出应答。依靠这种行为表现可以用来检测需要经过多少跳网元到达对端。原理是发出一系列Max-Forwards递增的OPTIONS请求,直到收到对端返回的200应答,对应的Max-Forwards值就是经过的SIP网元数量
注: SIP消息每经过一个SIP网元(服务或代理),Max-Forwards减少1
OPTIONS消息示例:
OPTIONS sip:carol@chicago.com SIP/2.0
Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKhjhs8ass877
Max-Forwards: 70
To: <sip:carol@chicago.com>
From: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710
CSeq: 63104 OPTIONS
Contact: <sip:alice@pc33.atlanta.com>
Accept: application/sdp
Content-Length: 0
SIP/2.0 200 OK
Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKhjhs8ass877
;received=192.0.2.4
To: <sip:carol@chicago.com>;tag=93810874
From: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710
CSeq: 63104 OPTIONS
Contact: <sip:carol@chicago.com>
Contact: <mailto:carol@chicago.com>
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE
Accept: application/sdp
Accept-Encoding: gzip
Accept-Language: en
Supported: foo
Content-Type: application/sdp
Content-Length: 274
(SDP not shown)
注: 上面200 OK中黑色部分,表示对端支持的能力参数