CANCEL

CANCEL方法用于终止还未完成的INVITE。UA或代理都可以生成CANCEL消息,前提是收到1xx应答但没收到最终应答。UA使用这个方法来取消先前发起的,但还未建立的呼叫。代理如果有分支并行处理,可以用这个方法取消之前的所有分支。CANCEL是一种逐跳处理的请求,它的应答由信令路径中下一个有状态元素生成。这个方法的CSeq序号不会递增,这样后面的代理或UA就能匹配CANCEL和对应的INVITE。

端到端与逐跳处理请求

CANCEL的branch ID与它要取消的INVITE相匹配。CANCEL只针对INVITE,是因为INVITE可能持续几秒(或几分钟)才能完成。而其它SIP请求都是立刻完成的(UAS必须立刻生成最终应答),因此,没必要CANCEL之前的(非INVITE)请求。

代理服务器收到CANCEL时,把它转发给之前初始INVITE请求相同的位置集。代理不需要等待下游的应答,而是直接向上游发出应答。UA确认取消时,对CANCEL请求回应一条200 OK消息,同时对初始INVITE请求回应487 Request Terminated。

如果已经收到最终应答,那么UA需要发BYE请求来终止会话。CANCEL与INVITE的最终应答在网络中有可能形成竞争条件。在这个示例中,CANCEL请求与INVITE的200 OK应答都经过代理服务器转发。代理服务器依然对CANCEL请求回应200 OK,同时它也会向UAC转发INVITE的200 OK应答消息。CANCEL请求的200 OK应答只是说明代理已经收到并转发CANCEL请求,UAC依然必须准备接收INVITE请求的最终应答。这个示例中收到的不是487而是200。但这时会话已经被UAC取消了,所以UAC必须先发一条ACK,再发一条BYE,UAS对它回应200 OK。

CANCEL与INVITE的竞争条件

因为CANCEL是逐跳处理的请求,所以它不能携带消息体。下面是一个CANCEL请求消息实例:

CANCEL sip:i.newton@cambridge.example.com SIP/2.0
Via: SIP/2.0/UDP 10.downing.example.org:5060;branch=z9hG4bK3134134
Max-Forwards:70
To: Isaac Newton <sip:i.newton@cambridge.example.com>
From: Rene Descartes <sip:visitor@10.downing.example.org>;tag=034323
Call-ID: 23d8e0e4e2e505329299e288bbd4155a
CSeq: 32156 CANCEL
Content-Length: 0
CANCEL的必要头域
Via
To
From
Call-ID
CSeq
Max-Forwards

OPTIONS

OPTIONS方法用于查询UA或服务器的能力及发现它当前的可用性。OPTIONS请求的应答消息中描述UA或服务端的能力集。代理服务器永远不会生成OPTIONS请求。UA或服务器对OPTIONS响应与INVITE一样(比如说,他不想理会,可以回应4xx或6xx)。成功类应答(2xx)可以包含Allow, Accept, Accept-Encoding, Accept-Language, 和 Supported头域,用于说明它的能力集。功能tag(比如audio, video , 和 isfocus)应该包含在Contact头域字段中。

OPTIONS请求不应包含消息体,但是也可以通过消息体说明媒体能力。代理服务器通过检查Request-URI是不是指向自己判断它是不是查询自己。如果Request-URI包含代理服务器的地址或主机名,那么请求就是发给代理的。否则,OPTIONS请求是发给其它代理或UA的,那么直接转发请求。OPTIONS请求消息的实例如下:

OPTIONS sip:user@carrier.example.com SIP/2.0
Via: SIP/2.0/UDP cavendish.kings.cambridge.example.com;branch=z9hG4bK1834
Max-Forwards:70
To: <sip:wiliamhopkins@cambridge.example.com>
From: J.C. Maxwell <sip:james.maxwell@kings.cambridge.example.com> ;tag=34
Call-ID: 747469e729acd305
CSeq: 29 OPTIONS
Content-Length: 0

对应的应答消息实例:

SIP/2.0 200 OK
Via: SIP/2.0/UDP cavendish.kings.cambridge.example.com;tag=512A6;branch=z9hG4bK0834 ;received=192.0.0.2
To: <sip:wiliamhopkins@cam.ac.uk>;tag=432
From: J.C. Maxwell <sip:james.maxwell@kings.cambridge.example.com> ;tag=34
Call-ID: 747469e729acd305
CSeq: 29 OPTIONS
Contact: <sip:william@tutors.cambridge.example.com>;audio;video
Allow: INVITE, OPTIONS, ACK, BYE, CANCEL, REFER
Supported: replaces, join
Accept-Language: en, de, fr
Content-Type: application/sdp
Content-Length: ...v=0
o=jc 2590845378 2590945578 IN IP4 tutors.cambridge.example.com
s=
c=IN IP4 tutors.cam.ac.uk
t=0 0
m=audio 32852 RTP/AVP 96 0
a=rtpmap:96 SPEEX/8000
a=rtpmap:0 PCMU/8000
m=video 82852 RTP/AVP 34
a=rtpmap:34 H263/90000
OPTIONS的必要头域
Via
To
From
Call-ID
CSeq
Max-Forwards

SIP 请求方法(4)-CANCEL OPTIONS相关推荐

  1. SIP 请求方法(1)-INVITE

    SIP请求的类型,也称作SIP方法.RFC3261 中定义了六种方法.另外八种方法有独立的RFC扩展描述. SIP请求或方法在协议中被视为"动词",因为它们请求另一个UA或服务器执 ...

  2. SIP 请求方法(7)- REFER

    RFC3515中定义了REFER方法,UA使用REFER方法请求另一个UA访问一个URI或URL资源.资源内容由Refer-To头域指定,通常是URI或URL,Refer-To头域对REFER请求来说 ...

  3. SIP 请求方法(5)-SUBSCRIBE NOTIFY

    前面介绍了RFC3261里定义的六种SIP方法.接下来,我们看看SIP扩展的方法有哪些. SUBSCRIBE UA 使用SUBSCRIBE方法来建立订阅关系,以获取特定事件的通知(通过NOTIFY方法 ...

  4. SIP 请求方法(6)- PUBLISH

    PUBLISH方法定义在 RFC3903,UA使用PUBLISH方法发布事件状态信息,信息发给一种叫事件状态合成器(event state compositor (ESC))的网元服务器.当事件状态有 ...

  5. http的请求方法 GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE 说明

    2019独角兽企业重金招聘Python工程师标准>>> 超文本传输协议(HTTP, HyperText Transfer Protocol)是一种无状态的协议,它位于OSI七层模型的 ...

  6. HTTP请求方法之options请求

    HTTP请求方法之options请求 HTTP请求 最近在做unaipp H5网页端微信公众号登录授权时由于options请求导致code值失效问题.因此要避免服务器向后端发送options请求使用c ...

  7. HTTP请求方法:GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE 说明

    平时的Rest开发,用到的都是GET,POST,PUT,DELETE类型的请求.但Rest支持的请求类型不止前面4种,还有其他几种. 超文本传输协议(HTTP, HyperText Transfer ...

  8. HTTP1.1新增了五种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 、 CONNECT

    200 (成功) 服务器已成功处理了请求. 通常,这表示服务器提供了请求的网页. 201 (已创建) 请求成功并且服务器创建了新的资源. 202 (已接受) 服务器已接受请求,但尚未处理. 203 ( ...

  9. HTTP简介、请求方法与响应状态码

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! Https相关的文章,请看这一篇:TCP.IP协议族之数字签名与HTTPS详解 接下来想系统的回顾 ...

最新文章

  1. 想提高代码水平,做到这点就够了
  2. JavaWeb_域对象的属性操作
  3. 黄猫被汽车撞死 花猫雨夜苦守
  4. Python-OpenCV 处理图像(六):对象识别
  5. OS酱:“哎呀内存太小了,人家又缺页了!”
  6. Azure Arc:微软是怎么玩多云游戏的?
  7. Java对象引用四个级别(强、软、弱、虚)
  8. qt实现对话框选择文件路径并保存(简易版)
  9. 强大的音频、视频嗅探式下载工具,还自带浏览器
  10. 常用算法案例之贪心法(C语言)
  11. Spring SAS 0.2.0 上手教程
  12. python多行注释快捷键
  13. 朱淑真 潸然看断梨花落
  14. Lionel Messi
  15. A LEARNED REPRESENTATION FOR ARTISTIC STYLE
  16. 对random.seed()的理解
  17. node-red教程 5.4 context global与函数节点的其它功能
  18. 快速检查(QuickCheck)(译)
  19. C语言指针与结构体详述
  20. 4.1 拦截电话号码

热门文章

  1. CSS制作大风车动画及花朵
  2. r语言 tunerf函数_R语言 | 一网打尽高质量统计分析与机器学习包
  3. 读《倚天屠龙记》小感
  4. 2.Excel vba开发-从选择中突出显示重复项
  5. 监控POE供电交换机最大传输距离有多远?
  6. PoE供电交换机的五大优势详解
  7. Big-man进军Linux系统(二)
  8. 农林牧渔行业S2B2B系统高效链接上下游需求,加速平台供应链周转
  9. 计算机考试ppt,计算机考试PPT.ppt
  10. 瞎猫碰死耗子解决You are using pip version 9.0.1,however version 22.1.2 is available.You should consider upgr