Require介紹
如果請求的各項要素通過了UAS的判定,那麼如果存在Require頭域,接下來就是檢查Require頭域。Require頭域是UAC用來通知UAS應該用什麼樣的SIP擴充來處理本請求的。如果UAS不支援請求的Require頭域中的option-tag清單,那就必須産生一個420應答(錯誤的擴充)。并且UAS必須添上Unsupported頭域,裡邊填上剛才接收到的請求的Require頭域中,哪些options是自己所不支援的。
注意:Require和Proxy-Require禁止出現在CANCEL請求中,或者回應給非2xx應答的ACK請求中。就算出現了在處理的時候也必須被忽略。并且回應給2xx應答的ACK請求必須隻能包含在初始請求(在這個ACK請求之前的請求)中包含的Require和Proxy-Require所規定options,這樣才能保證服務端能夠正确處理。
例子:
UAC->UAS:
INVITE sip:[email protected]/2.0
Require: 100rel
UAS->UAC:
SIP/2.0 420 Bad Extension
Unsupported: 100rel
這個特性(Unsupported)是為了保證客戶-服務端都能夠無阻礙的互動,除非是options對方不支援(就像上邊的例子說明的一樣)。對于互相比對的客戶-服務端(互相比對的意思就是用戶端Require的正好是服務端支援的),那麼這些請求、應答将會處理的非常迅速,減少了一個請求的往返協商的浪費。另外,這個也避免了用戶端不知道服務端到底不支援那些特性擴充。
某些特性擴充隻對終端(endsystem)有效例如呼叫處理域等等。
Require頭域應用
Require頭域用于UAC告訴UAS關于要求UAS支援那些特性。雖然這是一個可選的頭域,但是如果Require頭域存在,那就一定不能掠過不處理。
頭域包含一個option tag的清單。每一個option tag定了一個要處理請求要求UAS必須支援的SIP擴充。通常,這用于定義一個需要支援的擴充頭域的集合。本規範的UAC應當隻包含規範的RFC擴充。
例如:
Require:100rel