取消一个请求(Cancel)

CANCEL请求,就像名字所说的,是用来取消客户端发起的上一个请求的。

CANCEL请求UAS去终止上一个请求并且对上一个请求产生一个错误的应答。CANCEL对UAS已经给出终结应答的请求无效。所以,CANCEL请求的最大用处是取消需要服务器长时间处理的请求。也就是说,CANCEL最常用来处理取消INVITE请求。在这种使用中,UAS接收到对一个INVITE请求的CANCEL请求,当这个INVITE还没有得到终结应答的时候,UAS会”停止振铃”,并且给INVITE请求一个错误的应答(487)。

 

一个有状态的proxy需要对CANCEL进行响应,而不是简单的转发从下行流中接收到的一个应答。基于这个原因,CANCEL是一个”点对点”(hop-by-hop)的请求。

 

:取消一个请求只能发生在UAC方,即该请求发起者。UAS端取消取消请求使用的是4**应答。

 

1客户行为(Client Behavior)
CANCEL请求不应该取消除了INVITE之外的请求。因为除了INVITE之外的请求的响应都是立即响应的,所以,发送CANCEL来取消一个非INVITE请求总是形成一种赛跑的局面(就是说,cancel先到还是被取消的请求先到)。
在CANCEL请求中的Request-URI , Call-ID , To ,Cseq的数字部分,From这些头域都必须和被取消的请求头域一样,包含这些头域的tags.客户端创建的CANCEL必须只有一个Via头域值,这个头域值和被取消的请求的最上一个Via头域值相同。在Cseq请求头域的method部分必须是一个CANCEL方法。这个让这个CANCEL请求被当作自己的事务而被正确的鉴别和处理。
CANCEL头域必须不能包含任何Require或者Proxy-Require头域。
一旦CANCEL请求被创建了,客户端应当检查是否收到了这个CANCEL请求取消的原始请求的任何应答(临时的或者终结的应答)。如果没有任何临时应答收到,这个CANCEL请求一定不能发送,直到客户端等到了第一个临时应答。如果原始请求已经收到一个终结应答,这个CANCEL也不应当发送,因为CANCEL请求对已经产生了终结应答的请求没有任何作用。
如果允许在接收应答之前发送CANCEL请求,那么服务端可能在接收原始请求之前接收到CANCEL请求。
注意,原始请求的事务和CANCEL请求的事务都是互相独立的。也就是说,UAC判定一个请求的取消不能依赖原始请求的一个487(请求终止)应答,遵循RFC2543协议,UAS不会产生这样一个应答。如果原始请求经过了64*T1秒还没有应答,客户端应当认为原始请求已经取消,并且应当销毁对应原始请求的客户端事务。


2 服务端行为(Server Behavior)
当UAS收到CANCEL请求,首先按照UAS通用处理方法进行处理。不过,既然CANCEL请求是基于”点对点”(hop-by-hop)的,也是不能再提交的,他们不能由服务器为了获得Authorization头域中正确的认证而反复尝试。注意,因此CANCEL请求也不能包含Require头域。
UAS不能找到与CANCEL请求相匹配的事务,它应该给CANCEL一个481应答(调用的Leg/Transaction不存在会话/事务不存在)。如果对应原始请求的事务存在,那么UAS在接收到CANCEL请求的处理就依赖于是否已经给这个原始请求发出了终结应答。如果已经发出了,不会对CANCEL请求对应的原始请求做任何处理,不会更改任何会话状态,不会对原始请求的应答做任何处理。如果UAS没有发出对原始请求的终结应答,它会依赖于CANCEL所取消的原始请求方法。如果原始请求方法是INVITE,UAS应当立刻响应INVITE一个487(请求终止)。本协议中,对CANCEL取消的其他本协议中定义的方法没有约定。
不管原先请求的方法是什么,只要CANCEL匹配一个事务,UAS就响应CANCEL请求一个200(OK)应答。

 

参考

RFC3261

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NYOJ88(数论)

题意明确,让计算出起始有m个金片的汉诺塔金片全部移动到另外一个针上时需要移动的最少步数是多少?(由于结果太大,现在只要求算出结果的十进制位最后六位) 解题思路:大家都很熟悉汉诺塔求移动次数公式为f(n1…

Linq 学习笔记(二)

Linq 学习笔记(二) 下面就来介绍一些查询的示例: 1。Linq查询 var racers from r in Formula1.GetChampions()where r.Wins > 15 && (r.Country "Brazil" || r.Country "Austria") select r;foreach (var …

机器学习在水文地质方面的文章--文献阅读

第一篇 Ensemble machine learning paradigms in hydrology: A review - ScienceDirecthttps://www.sciencedirect.com/science/article/pii/S0022169421003139?via%3Dihub第二篇 Stream water quality prediction using boosted regression tree and random forest models …

查询能力(SIP OPTIONS)

SIP方法OPTIONS允许一个UA来查询另外一个UA或者proxy服务器的能力。这个提供客户端一个手段来查询服务端支持的方法,内容类型,扩展,codecs等等。比如,在客户端试图在INVITE请求头中增加一个请求字段选项的时候,它并不知…

单体预聚合的目的是什么_高分子化学实验指导书-修改-2012

高分子化学实验指导书任课教师姓名:王小慧王小英所用教材:《高分子化学实验》何卫东主编中国科学技术大学出版社选读参考书:《高分子化学实验》梁晖卢江主编化学工业出版社一、教学形式1、课前,学生通过阅读参考书和《高分子化学实…

MemDC,GDI绘制注意点

最近绘制老犯同样的错误,记录下: 1.MemDC中的MemBmp大小一定要设定好,经常设小了,后面的绘不出来,同时最后dc.bitblt时,大小一定要和MemBmp 一致,同样经常是MemBmp必变了,bitblt的rcDest没变&am…

基于集成学习的不平衡数据集分类问题研究--文献阅读

参考文献 基于集成学习的不平衡数据集分类问题研究 - 中国知网https://kns.cnki.net/kcms/detail/detail.aspx?dbcodeCMFD&dbnameCMFD202201&filename1021697818.nh&uniplatformNZKPT&vK9J_5NETTyZXPhDr5D6KwISCv2zm0skRm7rEZ0KmYS0Yv_zs562Re8oiwR5h_ylK 文…

SIP注册

注册服务为特定地区的位置服务创建绑定关系,这个绑定关系是用来建立包含一个或者多个联系地址的address-of-recordURI。因而,当那个地区的proxy接收到一个请求,这个请求的Request-URI和address-of-record的记录匹配,那么这个proxy…

profile 安卓work_androidWorkProfileGeneralDeviceConfiguration 资源类型

androidWorkProfileGeneralDeviceConfiguration 资源类型androidWorkProfileGeneralDeviceConfiguration resource type2020/9/22本文内容命名空间:microsoft.graphNamespace: microsoft.graph注意: 适用于 Intune 的 Microsoft Graph API 需要适用于租户…

[读书笔记]TCP/IP详解V1读书笔记-1

TCP数据单元:tcp segment UDP数据单元:udp datagram IP数据单元:IP datagram 链路层单元:frame --------------------------------------- 应用层: SMTP:简单邮件传输协议 FTP:文件传输协议 DNS…

pandas划分数据

1.根据列位置划分 execldata pd.read_excel(filepath) # 获取列数 bandscount execldata.shape[1] #去除最后一列数据类别 bandscount bandscount - 1 classifypointdata execldata[:, 0:bandscount] classifypointlabel execldata[:, -1] 2.根据字段名称进行划分 exec…

SIP协议(基础技术知识)

SIP协议(基础技术知识) SIP(Session InitiationProtocol)协议是Internet多媒体通信和控制协议体系的一部分,该协议族包括会话描述协议(SDP)、会话发布协议(SAP)和会话启动协议(SIP)。会话描述协议用于描述会话发布、会…

python 程序停止打印日志_停止 Spring Boot 服务的几种优雅姿势

在使用 Spring Boot 的时候,都要涉及到服务的停止和启动,当我们停止服务的时候,很多时候大家都是 kill -9 直接把程序进程杀掉,这样程序不会执行优雅的关闭。而且一些没有执行完的程序就会直接退出。我们很多时候都需要安全的将服…

Office - 安装程序找不到office.zh-cn\*.文件

Office - 安装程序找不到office.zh-cn\*.文件 在同时安装vs2008 和 office2007 有可能会遇到个问题(如果现在安装office2007,在安装vs2008 不会出现问题, 反正会出现下面问题)在安装office2007时总是提示“安装程序找不到 offi…

批量导出部分依赖图(PDP)

部分依赖图 (PDP) 和个体条件期望 (ICE) 图可用于可视化和分析目标响应1与一组感兴趣的输入特征之间的交互。 部分依赖图 (PDP) 显示了目标响应与一组感兴趣的输入特征之间的依赖关系,边缘化了所有其他输入特征(“补充”特征)的值。直观地说…

c#读蓝牙数据_CSharp--BlueTooth 实现蓝牙通讯的程序 C#开发 可以发送和接收数据 方便二次开发 - 下载 - 搜珍网...

蓝牙C#/BluetoothDemo/bin/Debug/BluetoothDemo.exe蓝牙C#/BluetoothDemo/bin/Debug/OpenNETCF.BluetoothEx.dll蓝牙C#/BluetoothDemo/BluetoothDemo.csproj蓝牙C#/BluetoothDemo/BluetoothDemo.csproj.user蓝牙C#/BluetoothDemo/frmMain.cs蓝牙C#/BluetoothDemo/frmMain.Desig…

基于SDP的提议/应答(offer/answer)模型简介

1、引入 在松耦合会议中,会话参数完全由会议创建者来确定,参与者能做的仅仅是根据这些会话参数来加入会议(当然也可以选择不加入)。这种情况下,主要要做的就是会话描述,在这里SDP本身就足够了。 但是在更为…

arcgis已知两点投影坐标求距离

问题: 已知中心点坐标,求个点与中心点坐标的距离 解决方法如下: 新建字段 在新建字段上右键字段计算器 利用字段计算器进行两点间距离计算 不懂问题请进群交流询问相关知识点

【原创】StreamInsight查询系列(十九)——查询模式之检测异常

上篇文章介绍了查询模式中如何发现趋势,这篇博文将介绍StreamInsight中如何检测异常。 测试数据准备 为了方便测试查询,我们首先准备一个静态的测试数据源:var now DateTime.Parse("09/12/2011 8:57:00 PM"); var input new[] {n…

tensorflow 旋转图片_使用TensorFlow对图像进行随机旋转的实现示例

https://www.jb51.net/article/178934.htm在使用深度学习对图像进行训练时,对图像进行随机旋转有助于提升模型泛化能力。然而之前在做旋转等预处理工作时,都是先对图像进行旋转后保存到本地,然后再输入模型进行训练,这样的过程会增…