21. 响应码 (Response Codes)
本章定义了SIP响应码的含义。响应码是一个3位整数,用于指示请求的结果。响应码分为6类。
响应码分类
- 1xx: 临时响应 (Provisional) - 请求已收到,继续处理
- 2xx: 成功 (Success) - 请求已成功接收、理解和接受
- 3xx: 重定向 (Redirection) - 需要进一步操作以完成请求
- 4xx: 请求失败 (Client Error) - 请求包含错误语法或无法满足
- 5xx: 服务器失败 (Server Error) - 服务器未能满足有效请求
- 6xx: 全局失败 (Global Failure) - 请求在任何服务器上都无法满足
21.1 临时响应 (1xx)
21.1.1 100 Trying
含义: 尝试中
说明: 扩展搜索正在进行中,但在时间限制内没有确定响应
21.1.2 180 Ringing
含义: 振铃
说明: UA已收到INVITE并正在尝试提醒用户
21.1.3 181 Call Is Being Forwarded
含义: 呼叫正在转发
说明: 服务器可能使用此状态码指示呼叫正在转发到不同的目的地集
21.1.4 182 Queued
含义: 排队
说明: 被叫方暂时不可用,但服务器已排队此请求
21.1.5 183 Session Progress
含义: 会话进展
说明: 用于传达关于呼叫进展的信息
21.2 成功响应 (2xx)
21.2.1 200 OK
含义: 成功
说明: 请求已成功
21.3 重定向响应 (3xx)
21.3.1 300 Multiple Choices
含义: 多项选择
说明: 地址解析产生了多个选择,用户(或UAC)可以从中选择
21.3.2 301 Moved Permanently
含义: 永久移动
说明: 用户不再位于Request-URI指示的地址
21.3.3 302 Moved Temporarily
含义: 临时移动
说明: 请求接收者可以使用Contact头字段指示的URI临时联系
21.3.4 305 Use Proxy
含义: 使用代理
说明: 请求的资源必须通过Contact字段给出的代理访问
21.3.5 380 Alternative Service
含义: 替代服务
说明: 呼叫未成功,但建议了替代服务
21.4 请求失败响应 (4xx)
21.4.1 400 Bad Request
含义: 错误请求
说明: 由于语法错误,服务器无法理解请求
21.4.2 401 Unauthorized
含义: 未授权
说明: 请求需要用户认证
21.4.3 402 Payment Required
含义: 需要付费
说明: 保留供将来使用
21.4.4 403 Forbidden
含义: 禁止
说明: 服务器理解请求,但拒绝满足它
21.4.5 404 Not Found
含义: 未找到
说明: 服务器有关于用户不存在于Request-URI指定域的确定信息
21.4.6 405 Method Not Allowed
含义: 方法不允许
说明: Request-URI标识的资源不允许使用Request-Line中指定的方法
21.4.7 406 Not Acceptable
含义: 不可接受
说明: 资源只能生成Accept头字段不可接受的响应
21.4.8 407 Proxy Authentication Required
含义: 需要代理认证
说明: 请求需要代理的用户认证
21.4.9 408 Request Timeout
含义: 请求超时
说明: 服务器在合理时间内未能产生响应
21.4.10 410 Gone
含义: 已消失
说明: 请求的资源在服务器上不再可用且没有转发地址
21.4.11 413 Request Entity Too Large
含义: 请求实体过大
说明: 服务器拒绝处理请求,因为请求实体大于服务器愿意或能够处理的
21.4.12 414 Request-URI Too Long
含义: Request-URI过长
说明: 服务器拒绝服务请求,因为Request-URI长于服务器愿意解释的
21.4.13 415 Unsupported Media Type
含义: 不支持的媒体类型
说明: 服务器拒绝服务请求,因为请求的消息体格式不受支持
21.4.14 416 Unsupported URI Scheme
含义: 不支持的URI方案
说明: 服务器无法处理请求,因为Request-URI的方案不被服务器识别
21.4.15 420 Bad Extension
含义: 错误扩展
说明: 服务器不理解Proxy-Require或Require头字段中列出的协议扩展
21.4.16 421 Extension Required
含义: 需要扩展
说明: UAS需要特定扩展来处理请求
21.4.17 423 Interval Too Brief
含义: 间隔太短
说明: 服务器拒绝请求,因为Expires头字段的值太小
21.4.18 480 Temporarily Unavailable
含义: 暂时不可用
说明: 被叫方的终端系统成功联系,但被叫方当前不可用
21.4.19 481 Call/Transaction Does Not Exist
含义: 呼叫/事务不存在
说明: 此状态码由UAS和服务器事务返回
21.4.20 482 Loop Detected
含义: 检测到循环
说明: 服务器检测到循环
21.4.21 483 Too Many Hops
含义: 跳数过多
说明: 服务器收到包含Max-Forwards头字段的请求,值为零
21.4.22 484 Address Incomplete
含义: 地址不完整
说明: 服务器收到Request-URI不完整的请求
21.4.23 485 Ambiguous
含义: 模糊
说明: Request-URI模糊
21.4.24 486 Busy Here
含义: 此处忙
说明: 被叫方的终端系统成功联系,但被叫方当前不希望或无法参与
21.4.25 487 Request Terminated
含义: 请求已终止
说明: 请求被BYE或CANCEL请求终止
21.4.26 488 Not Acceptable Here
含义: 此处不可接受
说明: 响应与Accept、Accept-Encoding或Accept-Language头字段中的任何值不兼容
21.4.27 491 Request Pending
含义: 请求挂起
说明: UAS已有对话的挂起请求
21.4.28 493 Undecipherable
含义: 无法解密
说明: UAS收到包含加密MIME体的请求,但无法解密
21.5 服务器失败响应 (5xx)
21.5.1 500 Server Internal Error
含义: 服务器内部错误
说明: 服务器遇到意外情况,阻止它满足请求
21.5.2 501 Not Implemented
含义: 未实现
说明: 服务器不支持满足请求所需的功能
21.5.3 502 Bad Gateway
含义: 错误网关
说明: 服务器作为网关或代理时,从它访问的下游服务器收到无效响应
21.5.4 503 Service Unavailable
含义: 服务不可用
说明: 服务器由于临时过载或维护而暂时无法处理请求
21.5.5 504 Server Time-out
含义: 服务器超时
说明: 服务器在访问另一服务器时未能及时收到响应
21.5.6 505 Version Not Supported
含义: 版本不支持
说明: 服务器不支持或拒绝支持请求中使用的SIP协议版本
21.5.7 513 Message Too Large
含义: 消息过大
说明: 服务器无法处理请求,因为消息长度超出其处理能力
21.6 全局失败响应 (6xx)
21.6.1 600 Busy Everywhere
含义: 到处忙
说明: 被叫方的终端系统成功联系,但被叫方忙且不希望参与
21.6.2 603 Decline
含义: 拒绝
说明: 被叫方的机器成功联系,但用户明确不希望或无法参与
21.6.3 604 Does Not Exist Anywhere
含义: 任何地方都不存在
说明: 服务器有信息表明Request-URI中指示的用户不存在于任何地方
21.6.4 606 Not Acceptable
含义: 不可接受
说明: UA已成功联系,但会话描述的某些方面不可接受
响应码快速参考表
| 代码 | 含义 | 类别 |
|---|---|---|
| 100 | Trying | 临时 |
| 180 | Ringing | 临时 |
| 181 | Call Is Being Forwarded | 临时 |
| 182 | Queued | 临时 |
| 183 | Session Progress | 临时 |
| 200 | OK | 成功 |
| 300 | Multiple Choices | 重定向 |
| 301 | Moved Permanently | 重定向 |
| 302 | Moved Temporarily | 重定向 |
| 305 | Use Proxy | 重定向 |
| 380 | Alternative Service | 重定向 |
| 400 | Bad Request | 客户端错误 |
| 401 | Unauthorized | 客户端错误 |
| 403 | Forbidden | 客户端错误 |
| 404 | Not Found | 客户端错误 |
| 405 | Method Not Allowed | 客户端错误 |
| 406 | Not Acceptable | 客户端错误 |
| 407 | Proxy Authentication Required | 客户端错误 |
| 408 | Request Timeout | 客户端错误 |
| 410 | Gone | 客户端错误 |
| 413 | Request Entity Too Large | 客户端错误 |
| 414 | Request-URI Too Long | 客户端错误 |
| 415 | Unsupported Media Type | 客户端错误 |
| 416 | Unsupported URI Scheme | 客户端错误 |
| 420 | Bad Extension | 客户端错误 |
| 421 | Extension Required | 客户端错误 |
| 423 | Interval Too Brief | 客户端错误 |
| 480 | Temporarily Unavailable | 客户端错误 |
| 481 | Call/Transaction Does Not Exist | 客户端错误 |
| 482 | Loop Detected | 客户端错误 |
| 483 | Too Many Hops | 客户端错误 |
| 484 | Address Incomplete | 客户端错误 |
| 485 | Ambiguous | 客户端错误 |
| 486 | Busy Here | 客户端错误 |
| 487 | Request Terminated | 客户端错误 |
| 488 | Not Acceptable Here | 客户端错误 |
| 491 | Request Pending | 客户端错误 |
| 493 | Undecipherable | 客户端错误 |
| 500 | Server Internal Error | 服务器错误 |
| 501 | Not Implemented | 服务器错误 |
| 502 | Bad Gateway | 服务器错误 |
| 503 | Service Unavailable | 服务器错误 |
| 504 | Server Time-out | 服务器错误 |
| 505 | Version Not Supported | 服务器错误 |
| 513 | Message Too Large | 服务器错误 |
| 600 | Busy Everywhere | 全局失败 |
| 603 | Decline | 全局失败 |
| 604 | Does Not Exist Anywhere | 全局失败 |
| 606 | Not Acceptable | 全局失败 |
常见使用场景
成功呼叫流程
UAC UAS
|---INVITE----->|
|<--100 Trying--|
|<--180 Ringing-|
|<--200 OK------|
|---ACK-------->|
忙线场景
UAC UAS
|---INVITE----->|
|<--100 Trying--|
|<--486 Busy----|
|---ACK-------->|
重定向场景
UAC Proxy
|---INVITE----->|
|<--302 Moved---|
| (new contact) |
|---ACK-------->|
| |
|---INVITE----->| (to new contact)
认证场景
UAC UAS
|---INVITE----->|
|<--401 Unauth-|
|---ACK-------->|
|---INVITE----->| (with Authorization)
|<--200 OK------|
关键要点
- 响应码分为6类,从1xx到6xx
- 1xx是临时响应,不终止事务
- 2xx表示成功,是唯一的成功响应类
- 3xx用于重定向,提供新的联系地址
- 4xx表示客户端错误,请求有问题
- 5xx表示服务器错误,服务器无法处理
- 6xx表示全局失败,任何地方都无法满足请求
- 某些响应码要求特定头字段(如401需要WWW-Authenticate)
本章小结:
第21章定义了SIP协议中使用的所有标准响应码。响应码采用3位数字,分为6类,每类表示不同类型的结果。理解这些响应码的含义对于正确处理SIP通信至关重要。UA和代理必须能够生成和处理这些响应码,以实现完整的SIP功能。