為什么會(huì)出現(xiàn):416 Unsupported URI Scheme
消息流轉(zhuǎn)過程
模擬了一個(gè)SIP終端,先注冊(cè)到FreeSWITCH,然后嘗試發(fā)起呼叫(INVITE請(qǐng)求),但遇到了錯(cuò)誤,錯(cuò)誤代碼416表示URI方案不受支持,這通常與請(qǐng)求中的URI格式有關(guān)。
出現(xiàn)416可能的原因
1. URI格式錯(cuò)誤:SIP請(qǐng)求中的URI可能不符合標(biāo)準(zhǔn),比如缺少`sip:`前綴,或者格式不正確。
2.未正確注冊(cè):雖然用戶完成了注冊(cè),但可能注冊(cè)信息未正確傳遞,導(dǎo)致FreeSWITCH無法識(shí)別主叫或被叫方的URI。
3.FreeSWITCH配置問題:可能服務(wù)器配置限制了某些URI方案,或者模塊未正確加載。
4. SDP或消息頭問題:INVITE請(qǐng)求中的其他部分可能存在問題,如SDP內(nèi)容錯(cuò)誤,導(dǎo)致服務(wù)器拒絕請(qǐng)求。
逐步分析
Step1:發(fā)送注冊(cè)請(qǐng)求后回復(fù)了200 OK(NOTIFY)。這可能涉及訂閱狀態(tài)的通知,但注冊(cè)和INVITE是兩個(gè)獨(dú)立的事務(wù)。注冊(cè)成功后,終端可以發(fā)起呼叫,但需要確保注冊(cè)信息正確,比如Contact頭中的URI有效。
Step2:錯(cuò)誤416明確指出URI方案不受支持。SIP URI的標(biāo)準(zhǔn)格式是`sip:user@domain`,如果用戶遺漏了`sip:`,或者使用了其他不支持的方案(如`tel:`),就會(huì)導(dǎo)致該錯(cuò)誤。例如,如果INVITE請(qǐng)求中的To頭寫成`user@domain`而不是`sip:user@domain`,就會(huì)觸發(fā)416錯(cuò)誤。
驗(yàn)證INVITE請(qǐng)求結(jié)構(gòu)
檢查INVITE請(qǐng)求的To和From頭,確保URI包含`sip:`前綴。例如:
To: <sip:1001@freeswitch.domain>
From: <sip:1000@freeswitch.domain>
如果用戶遺漏了`sip:`,或者URI格式不正確(如錯(cuò)誤的域名或端口),FreeSWITCH將無法處理請(qǐng)求。另外,用戶的注冊(cè)請(qǐng)求是否正確設(shè)置了Contact頭?Contact頭中的URI是否包含有效的傳輸協(xié)議(如UDP)和端口? 例如Contact: <sip:1000@192.168.0.63:5060;transport=udp>
如果Contact頭不正確,可能導(dǎo)致后續(xù)請(qǐng)求中的URI被錯(cuò)誤解析。此外,用戶可能在發(fā)送INVITE時(shí),請(qǐng)求URI(Request-URI)格式錯(cuò)誤。INVITE請(qǐng)求的第一行應(yīng)該是:INVITE sip:1001@freeswitch.domain SIP/2.0,通過字符串進(jìn)行發(fā)送起始行消息,需要確保所發(fā)送的INVITE起始行正確。
并且檢查INVITE請(qǐng)求中的各個(gè)URI字段,包括To、From、Contact和Request-URI,確保它們都正確使用了`sip:`方案,并且格式正確。此外,還要檢查網(wǎng)絡(luò)配置,確保FreeSWITCH能夠正確解析這些URI。
發(fā)送格式正確的 INVITE 請(qǐng)求
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長(zhǎng)度]
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