SIP 回應碼 (Response Code, Status-Code) 用在 SIP 回應的頭行 (狀態行、Status-Line) 第 2 個欄位,有 3 位數字。回應碼分成暫時回應 (Provisional Response) 和最後回應 (Final Response)。依第 1 位數字分類:
回應碼 | 分類 | 說明 |
1xx | 暫時回應 (SIP transaction 進行中) | 收到請求,還在處理中。 |
2xx | 最後回應 (結束 SIP transaction) | Success | 請求成功。 |
3xx | Fail | Redirection | 請改洽新位址。 |
4xx | Request Error | 特定 Server 的回應請求失敗,可能語法有誤或無法在此 server 提供。 |
5xx | Server Error | 有效的請法無法在此 server 提供。 |
6xx | Global Failure | 請求無法在任何 server 提供。 |
回應碼適用大部分 HTTP/1.1 回應碼,6xx 類是 SIP 新增,完整列表可見 IANA SIP 參數 登記的回應碼。每個回應碼會有對應的預設 Reason-Phrase。
UAC 必須能處理每個 class 的 x00 和 183,不認得的最後回應 MUST 當作同 class 的 x00 處理,不認得的暫時回應當作 183 Session Progress 處理。[RFC3261 8.1.3.2]
Provisional 1xx
暫時回應 (Provisional Response),表示還在進行中,要再等最後回應。
如果預期還要 200 ms 以上才會有結果,先送 1xx 回應。
可包括信體,如含 session 描述。
1xx 回應並不會可靠地傳送,不會讓 UAC 送 ACK。使用
PRACK 可可靠傳送暫時回應。
100 Trying
嘗試中。表示下一站 Proxy 已經收到請求,一些未知的動作正在進行中 (例如:資料庫查詢中),和其它暫時的回應一樣會停止 UAC 重傳 INVITE。但不同於其它暫時的回應,stateful proxy 不回送 100 Trying。
180 Ringing
振鈴中。被叫端用戶正在響鈴,一般主叫端需要產生回鈴音。
一般不含 SDP,需要主叫端自己產生回鈴音。
181 Call Is Being Forwarded
轉接中。可用來表示呼叫已經轉送到不同的目的地。
182 Queued
排隊等候中。Reason-Phrase 可提供更多細節,例如「5 calls queued; expected waiting time is 15 minutes」,可發多次更新等候狀態。
183 Session Progress
呼叫進行中 。不清楚被叫是否正在響鈴或是其它狀態,可在 Reason-Phrase 信頭欄位、或信體提供更多資訊。
UAC 必須能處理 183,不認得的暫時回應當作 183 處理。[RFC3261 8.1.3.2]
一般會含 SDP,在接通前建立不收費的 early-media,由局端提供音訊,可能應用:
- 彩鈴,可能是不同的回鈴音、或音樂。(該用 180?)
- 錯誤語音,「您撥的號碼錯誤,請察明後再撥」、「您撥的號碼通話中,請稍後再撥」等。
- IVR。
early-media 需要 INVITE 提供 SDP early-offer 才能送到主叫端,如果 INVITE 沒提供 SDP 呢?回 503?
P-Early-Media header
https://thanhloi2603.wordpress.com/2017/08/05/sip-180-vs-183-vs-early-media/
待讀:https://www.ietf.org/archive/id/draft-ietf-sip-183-00.txt
Successful 2xx
請求成功。
200 OK
請求成功,附帶回傳的資訊視請求使用的 method。
204 No Notification
成功,但沒有其它 Notification,用在 SUBSCRIBE。
Redirection 3xx
提供可能滿足呼叫的用戶新位址或服務。
300 Multiple Choices
多重選擇
301 Moved Permanently
已永久遷移。受話端不再使用 Request-URI 上的位址,應該改嘗試
Contact 信頭欄位給的新位址。
發話端應該更新自己紀錄的相關資料 (如電話簿),改用新位址。
302 Moved Temporarily
暫時遷移。
305 Use Proxy
請改用代理伺服器存取。UAS 回應要求的資源必須透過給定在 Contact 欄位的 proxy 存取。
380 Alternative Service
有另外的服務。呼叫失敗,但可用說明在訊息體的另外服務。
Request Failure 4xx
來自特定 server 失敗的回應 (到其它 server 可能成功)。UAC 不應該重試沒修改的相同請求。
400 Bad Request
不當請求。請求由於 syntax 錯誤而無法處理。Reason-Phrase 應該要指出 syntax 問題細節,例如「Missing Call-ID header field」。
401 Unauthorized
未授權
402 Payment Required
要求付費
403 Forbidden
禁止
404 Not Found
用戶找不到。
405 Method Not Allowed
方法不允許。Request-URI 指定的位址不允許請求的 method 。
必須包含 Allow 信頭欄位列出指定的位址允許的 method。
406 Not Acceptable
不可接受
407 Proxy Authentication Required
需要代理伺服器授權
408 Request Timeout
呼叫超時:在預定時間內無法找到用戶
410 Gone
已消失:用戶曾經存在,但已從此處消失
413 Request Entity Too Large
呼叫實體過大
414 Request-URI Too Long
呼叫 URI 過長
415 Unsupported Media Type
不支援的媒體類型。請求的信體格式不支援,*必須* 在 Accept、Accept-Encoding、或 Accept-Language 回可接受的列表。
UAC 收到回應可再依據這些信頭欄位重試。
416 Unsupported URI Scheme
不支援的URI方案
423 Interval Too Brief
時間間隔過短
480 Temporarily Unavailable
暫時不可使用。用戶不在 (例如沒登入、啟用「勿干擾」(do not disturb)。可加 Retry-After 表示適當的再撥時間。用戶可能有其它聯繫方式。應該在 Reason-Phrase 表示更精確原因,如為什麼用戶不在。
也可能是 redirect 或 proxy server 沒有可用的轉送位置。
481 Call/Transaction Does Not Exist
通話不存在。
482 Loop Detected
偵測到迴圈。
483 Too Many Hops
經由過多。
484 Address Incomplete
地址不全。
485 Ambiguous
模糊不清。
486 Busy Here
受話端在這忙線中。回應可加 Retry-After 說明適當的再撥時間。受話端可能有其它聯繫方式,例如 voice mail,否則該用 600 Busy Everywhere。
487 Request Terminated
請求已結束。請求已經由
BYE 或
CANCEL 結束。487 不會用在回應 CANCEL。
用在 re-INVITE 需要掛斷嗎?
488 Not Acceptable Here
此處不可接受。
491 Request Pending
已經有待處理的 re-INVITE 進行中。
RFC 3261 新增,處理雙方同時互送 re-INVITE 的碰撞 (glare) 情況。
493 Undecipherable
無法解讀。
Server Failure 5xx
500 Internal Server Error
伺服器內部錯誤。
501 Not Implemented
未實作。
502 Bad Gateway
閘道器錯誤。
503 Service Unavailable
服務不可使用。
504 Server Time-out
伺服器超時。
505 SIP Version not supported
SIP 版本不支援。
513 Message Too Large
訊息過長。
Global Failures 6xx
全域失敗。
600 Busy Everywhere
各處皆忙線中。回應可加 Retry-After 說明適當的再撥時間。如果受話端不想 reveal 拒答原因,使用
603 Decline 取代。已知沒其它其它聯繫方式 (如 voice mail),否則應該使用
486 Busy Here。
603 Decline
受話端拒絕。回應可加 Retry-After 說明適當的再撥時間。已知沒其它其它聯繫方式。
604 Does Not Exist Anywhere
無處存在
606 Not Acceptable
不可接受。
參考
- RFC 3261 Section 21。