为什么会出现:416 Unsupported URI Scheme
扫描二维码
随时随地手机看文章
消息流转过程
模拟了一个SIP终端,先注册到FreeSWITCH,然后尝试发起呼叫(INVITE请求),但遇到了错误,错误代码416表示URI方案不受支持,这通常与请求中的URI格式有关。
出现416可能的原因
1. URI格式错误:SIP请求中的URI可能不符合标准,比如缺少`sip:`前缀,或者格式不正确。
2.未正确注册:虽然用户完成了注册,但可能注册信息未正确传递,导致FreeSWITCH无法识别主叫或被叫方的URI。
3.FreeSWITCH配置问题:可能服务器配置限制了某些URI方案,或者模块未正确加载。
4. SDP或消息头问题:INVITE请求中的其他部分可能存在问题,如SDP内容错误,导致服务器拒绝请求。
逐步分析
Step1:发送注册请求后回复了200 OK(NOTIFY)。这可能涉及订阅状态的通知,但注册和INVITE是两个独立的事务。注册成功后,终端可以发起呼叫,但需要确保注册信息正确,比如Contact头中的URI有效。
Step2:错误416明确指出URI方案不受支持。SIP URI的标准格式是`sip:user@domain`,如果用户遗漏了`sip:`,或者使用了其他不支持的方案(如`tel:`),就会导致该错误。例如,如果INVITE请求中的To头写成`user@domain`而不是`sip:user@domain`,就会触发416错误。
验证INVITE请求结构
检查INVITE请求的To和From头,确保URI包含`sip:`前缀。例如:
To: <sip:1001@freeswitch.domain>
From: <sip:1000@freeswitch.domain>
如果用户遗漏了`sip:`,或者URI格式不正确(如错误的域名或端口),FreeSWITCH将无法处理请求。另外,用户的注册请求是否正确设置了Contact头?Contact头中的URI是否包含有效的传输协议(如UDP)和端口? 例如Contact: <sip:1000@192.168.0.63:5060;transport=udp>
如果Contact头不正确,可能导致后续请求中的URI被错误解析。此外,用户可能在发送INVITE时,请求URI(Request-URI)格式错误。INVITE请求的第一行应该是:INVITE sip:1001@freeswitch.domain SIP/2.0,通过字符串进行发送起始行消息,需要确保所发送的INVITE起始行正确。
并且检查INVITE请求中的各个URI字段,包括To、From、Contact和Request-URI,确保它们都正确使用了`sip:`方案,并且格式正确。此外,还要检查网络配置,确保FreeSWITCH能够正确解析这些URI。
发送格式正确的 INVITE 请求
INVITE sip:1001@freeswitch.domain SIP/2.0
Via: SIP/2.0/UDP 192.168.0.63:5060;branch=z9hG4bK654321
From: <sip:1000@freeswitch.domain>;tag=efgh5678
To: <sip:1001@freeswitch.domain>
Call-ID: 1122334455@192.168.0.63
CSeq: 1 INVITE
Contact: <sip:1000@192.168.0.63:5060;transport=udp>
Content-Type: application/sdp
Content-Length: [SDP长度]
v=0
o=- 1234567890 1234567890 IN IP4 192.168.0.63
s=-
c=IN IP4 192.168.0.63
t=0 0
m=audio 20000 RTP/AVP 0 101
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000