16.3 验证请求
在 proxy 转发请求之前,它必须检查消息的合法性。一个合法的消息必须经过如下的检
查:
1、 合法的语法
2、 URI scheme
3、 大转发次数
4、 (可选)循环检测(loop detection)
5、 proxy-require
6、 proxy-authorization
如果任何一步失败了,proxy 都必须作为 UAS(8.2)一样,应答一个错误码。
注意 proxy 并不要求检查合并的请求,并且不能把合并的请求当作一个错误的情况。终
端接收到合并的请求会根据 8.2.2.2 节讲述的内容进行分解。
1、 合法的语法。
请求要能够被服务端事务处理,那么请求就必须是语法无误的。请求中的任何与检查相
关的部分或者与请求转发节相关的部分都必须语法严格无误。在检查中,其他部分的严
格与否,在检查中都被忽略,并且在转发消息过程中保持不变。例如,proxy 不会由于
非法的 Date 头域而拒绝请求。同样的 proxy 不会在转发请求的时候移去非法的 Date 头
域。这个是为了设计成为可扩展的。以后的扩展可能定义新的方法、新的头域。proxy
不能拒绝由于包含了不认识的方法或者不认识的头域而拒绝转发这个请求。
2、 URI scheme 检查
如果 Request-URI 包含一个 proxy 所不能理解的 URI 形式,那么 proxy 应当通过返回
一个 416 来拒绝这个请求(Unsupported URI scheme)。
3、 大转发次数检查
大转发次数 Max-Forwards 头域(20.22)是用来限制转发的次数的。如果请求没有
包含 Max-Forwards 头域,那么这个检查将被忽略。如果请求包含了一个 Max-Forwards
头域,并且这个头域大于 0,那么这个检查就跳过。如果请求包含一个 Max-Forwards
头域,并且这个头域为 0,那么这个 proxy 不能转发这个请求。如果请求是 OPTIONS
请求,那么 proxy 可以作为 终响应者来响应这个请求,并且遵循 11 节讲述的产生应
答。否则 proxy 应当返回一个 483(too many hops)应答。
4、 可选的 Loop Detection 检查
proxy 可以检查看看转发是否可能导致循环。如果请求包含一个 Via 头域,并且这个头
域值,和 proxy 早先保留的请求的头域值相同,那么这个请求就是以前经过过本 proxy。
要么这个请求就是循环处理了,要么就是合法的循环处理。要检测请求是否循环处理,
proxy 可以用 branch 参数,根据 16.6 节的第 8 步来计算,并且和接收到的 Via 头域做
比较。如果参数相等,那么请求就循环了。如果不等,那么请求就是合理的经过,并且
继续处理。如果检测到了循环,那么 proxy 应当返回一个 482(LoopDetechted)应答。
5、 Proxy-Require 检查
本协议的以后的扩展可能会要求额外的 proxy 特性。所以终端会在请求中包含一个
Proxy-Require 头域来表明会使用到那些特性,这样 proxy 就可以根据 Proxy-Require
判定自己是否能够支持这些特性。
如果请求包含一个Proxy-Require头域(20.29)并且有一个或者多个本proxy不能理解的
option-tags。那么这个 proxy 必须返回一个 420(Bad Extension)错误,并且这个错误
2021-10-24 23:24:56
822KB
sip
中文版
1