21. 响应代码
21 响应代码
响应代码与HTTP/1.1响应代码一致并扩展.并非所有HTTP/1.1响应代码都是适当的,这里只给出了适当的代码.不应使用其他HTTP/1.1响应代码.此外,SIP定义了一个新类6xx.
21.1 Provisional 1xx
临时响应(也称为信息性响应)表示所联系的服务器正在执行某些进一步的操作,并且还没有确定的响应.如果服务器预计需要200毫秒以上才能获得最终响应,则会发送1x响应.请注意,1xx响应无法可靠传输.它们不会导致客户端发送ACK.临时(1xx)响应可能包含消息体,包括会话描述.
21.1.1 100 Trying
此响应表示下一个跃点服务器received到请求,并且正在代表此调用执行某些未指定的操作(例如,正在查询数据库).与所有其他临时响应一样,此响应停止UAC对INVITE的重新传输.100(Trying)响应不同于其他临时响应,因为它从不由有状态代理向上游转发.
21.1.2 180 Ringing
接收到INVITE的UA正在尝试提醒用户.此响应可用于启动本地回铃.
21.1.3 181 Call Is Being Forwarded
服务器可以使用此状态代码来指示呼叫正被转发到另一组目的地.
21.1.4 182 Queued
被叫方暂时不可用,但服务器已决定对呼叫排队,而不是拒绝呼叫.当被调用方可用时,它将返回相应的最终状态响应.原因短语可能提供有关呼叫状态的更多详细信息,例如,"5个呼叫已排队;预期等待时间为15分钟".服务器可发出若干182(排队)响应,以向呼叫者更新排队呼叫的状态.
21.1.5 183 Session Progress
183(会话进度)响应用于传达关于呼叫进度的信息,该信息未被分类.原因短语,头字段或消息体可用于传达有关呼叫进度的更多细节.
21.2 Successful 2xx
请求成功.
21.2.1 200 OK
请求已成功.随响应返回的信息取决于请求中使用的方法.
21.3 Redirection 3xx
3xx响应提供有关用户新位置的信息,或关于可能满足呼叫的替代服务的信息.
21.3.1 300 Multiple Choices
请求中的地址解析为多个OPTIONS,每个OPTIONS都有自己的特定位置,用户(或UA)可以选择首选通信端点并将其请求重定向到该位置.
响应可以包括消息体,其中包含资源特征和位置的列表,如果接受请求头字段允许,则用户或UA可以从中选择最合适的一个.但是,尚未为此邮件正文定义任何MIME类型.
这些OPTIONS也应列为Contact 字段(第20.10节).与HTTP不同,SIP响应可能包含多个Contact 字段或Contact 字段中的地址列表.UAs可以使用Contact 头字段值进行自动重定向,也可以要求用户ACK选择.然而,本规范并未定义此类自动选择的任何标准.
如果可以在多个不同的位置联系到被调用方,并且服务器不能或不愿意代理请求,则此状态响应是合适的.
21.3.2 301 Moved Permanently
在Request-URI中的地址处再也找不到用户,请求客户端应在Contact 头字段给出的新地址处重试(第20.10节).请求者应使用此新值更新任何本地目录,通讯簿和用户位置缓存,并将未来的请求重定向到列出的地址.
21.3.3 302 Moved Temporarily
请求客户端应在Contact 头字段(第20.10节)给出的新地址重试请求.新请求的Request-URI使用响应中Contact 头字段的值.
联系人URI的有效期可通过Expires(第20.19节)头字段或Contact header字段中的Expires参数指示.代理和UAs都可以在到期时间内缓存此URI.如果没有明确的过期时间,则该地址对于递归仅有效一次,并且不能缓存以用于将来的事务.
如果从Contact header字段缓存的URI失败,则可以再次尝试重定向请求的Request-URI.
临时URI可能早于到期时间过期,并且新的临时URI可能可用.
21.3.4 305 Use Proxy
必须通过Contact 字段提供的代理访问请求的资源.Contact字段提供代理的URI.收件人应通过代理重复此单个请求.305(使用代理)响应只能由UAS生成.
21.3.5 380 Alternative Service
呼叫未成功,但可以使用其他服务.
替代服务在响应的消息体中描述.此处未定义此类机构的格式,可能是未来标准化的主题.
21.4 Request Failure 4xx
4xx响应是特定服务器的明确故障响应.客户端不应在没有修改的情况下重试同一请求(例如,添加适当的授权).但是,对不同服务器的相同请求可能会成功.
21.4.1 400 Bad Request
由于语法错误,无法理解该请求.原因短语应该更详细地识别语法问题,例如,"缺少Call-ID头字段".
21.4.2 401 Unauthorized
请求需要用户身份验证.此响应由UAS和REGISTER商发布,而407(需要Proxy-Authenticate)由代理服务器使用.
21.4.3 402 Payment Required
保留供将来使用.
21.4.4 403 Forbidden
服务器理解该请求,但拒绝满足该请求.授权没有帮助,请求不应重复.
21.4.5 404 Not Found
服务器具有用户在Request-URI中指定的域中不存在的确定信息.如果Request-URI中的域与请求收件人处理的任何域不匹配,也会返回此状态.
21.4.6 405 Method Not Allowed
可以理解请求行中指定的方法,但Request-URI标识的地址不允许使用该方法.
响应必须包括一个Allow header字段,其中包含指定地址的有效方法列表.
21.4.7 406 Not Acceptable
根据请求中发送的Accept header字段,由请求标识的资源只能生成具有不可接受内容特征的响应实体.
21.4.8 407 Proxy Authentication Required
此代码类似于401(未经授权),但表示客户端必须首先向代理进行身份验证.第26节和第22.3节解释了SIP访问认证.
此状态代码可用于需要身份验证而不是被叫方访问通信信道(例如,电话网关)的应用程序.
21.4.9 408 Request Timeout
例如,如果服务器无法及时确定用户的位置,则无法在适当的时间内生成响应.客户端可以在以后任何时候重复请求而不进行修改.
21.4.10 410 Gone
请求的资源在服务器上不再可用,并且不知道转发地址.预计这种情况将被视为永久性的.如果服务器不知道或无法确定该状况是否为永久性,则应使用状态代码404(未找到).
21.4.11 413 Request Entity Too Large
服务器拒绝处理请求,因为请求实体体大于服务器愿意或能够处理的大小.服务器可能会关闭连接以阻止客户端继续请求.
如果条件是临时的,则服务器应包含一个Retry After头字段,以指示该条件是临时的,并且在客户端可以重试的时间之后.
21.4.12 414 Request-URI Too Long
服务器拒绝为请求提供服务,因为Request-URI比服务器愿意解释的长度长.
21.4.13 415 Unsupported Media Type
服务器拒绝为请求提供服务,因为请求的消息体的格式不受服务器对请求方法的支持.根据内容的具体问题,服务器必须使用Accept,Accept Encoding或Accept Language头字段返回可接受格式的列表.第8.1.3.5节描述了UAC对该响应的处理.
21.4.14 416 Unsupported URI Scheme
服务器无法处理该请求,因为服务器不知道Request-URI中URI的方案.第8.1.3.5节描述了客户对该响应的处理.
21.4.15 420 Bad Extension
服务器不理解代理请求(第20.29节)或请求(第20.32节)头字段中指定的协议扩展.服务器必须在响应中的不支持头字段中包含不支持扩展的列表.第8.1.3.5节描述了UAC对该响应的处理.
21.4.16 421 Extension Required
UAS需要一个特定的扩展来处理请求,但该扩展未列在请求中支持的头字段中.具有此状态代码的响应必须包含一个Require header字段,其中列出了所需的扩展名.
UAS不应使用此响应,除非它确实无法向客户端提供任何有用的服务.相反,如果所需的扩展未在Supported header字段中列出,则服务器应使用基线SIP功能和客户端支持的任何扩展来处理请求.
21.4.17 423 Interval Too Brief
服务器拒绝该请求,因为该请求刷新的资源的过期时间太短.REGISTER官可以使用此响应拒绝Contact 头字段过期时间过短的REGISTER.第10.2.8节,第10.3节和第20.23节介绍了该响应的使用和相关的Min Expires头字段.
21.4.18 480 Temporarily Unavailable
已成功联系被叫方的终端系统,但被叫方当前不可用(例如,未登录,已登录但处于阻止与被叫方通信的状态,或已激活"请勿打扰"功能).响应可能指示在重试后头字段中调用的更好时间.用户也可以在其他地方使用(此服务器不知道)."原因"短语应指明被呼叫方不可用的更确切原因.该值应由UA设置.状态486(此处忙)可用于更精确地指示呼叫失败的特定原因.
此状态也由重定向或代理服务器返回,该服务器识别由Request-URI标识的用户,但当前没有该用户的有效转发位置.
21.4.19 481 Call/Transaction Does Not Exist
此状态表示UAS收到的请求与任何现有对话或事务都不匹配.
21.4.20 482 Loop Detected
服务器检测到循环(第16.3节第4项).
21.4.21 483 Too Many Hops
服务器收到一个请求,该请求包含一个值为零的Max-Forwards(第20.22节)头字段.
21.4.22 484 Address Incomplete
服务器收到的Request-URI不完整.应在原因短语中提供其他信息.
此状态代码允许重叠拨号.对于重叠拨号,客户端不知道拨号字符串的长度.它发送长度不断增加的字符串,提示用户进行更多输入,直到不再收到484(地址不完整)状态响应.
21.4.23 485 Ambiguous
Request-URI不明确.响应可能包含Contact 头字段中可能的明确地址列表.泄露备选方案可能会侵犯用户或组织的隐私.必须能够将服务器配置为以状态404(未找到)响应,或者禁止列出不明确Request-URI的可能OPTIONS.
使用Request-URI sip对请求的响应示例:[email protected]:
SIP/2.0 485 Ambiguous
Contact: Carol Lee `<sip:[email protected]>`
Contact: Ping Lee `<sip:[email protected]>`
Contact: Lee M. Foote `<sips:[email protected]>`
一些电子邮件和语音邮件系统提供此功能.由于语义不同,因此使用了与3xx分开的状态代码:对于300,假设所提供的选择将访问同一个人或服务.虽然自动选择或顺序搜索对3xx响应有意义,但485(不明确)响应需要用户干预.
21.4.24 486 Busy Here
已成功联系被叫方的终端系统,但被叫方当前不愿意或无法在此终端系统上接听其他电话.响应可能指示在重试后头字段中调用的更好时间.用户也可以访问
其他地方,如通过语音邮件服务.如果客户端知道没有其他终端系统能够接受此呼叫,则应使用状态600(到处忙).
21.4.25 487 Request Terminated
请求被BYE或CANCEL请求终止.CANCEL request本身永远不会返回此响应.
21.4.26 488 Not Acceptable Here
响应具有与606相同的含义(不可接受),但仅适用于由Request-URI寻址的特定资源,并且请求可能在别处成功.
响应中可能存在包含媒体功能描述的消息体,该消息体根据INVITE(或应用程序/sdp,如果不存在)中的Accept header字段进行格式化,与对OPTIONS请求的200(确定)响应中的消息体相同.
21.4.27 491 Request Pending
该请求由在同一对话中有挂起请求的UAS接收.第14.2节描述了如何解决此类"眩光"情况.
21.4.28 493 Undecipherable
该请求由包含加密MIME正文的UAS接收,收件人不拥有或不会提供相应的解密密钥.此响应可能有一个包含适当公钥的正文,该公钥应用于加密发送到此UA的MIME正文.有关此响应代码使用的详细信息,请参见第23.2节.
21.5 Server Failure 5xx
5xx响应是服务器本身出错时给出的故障响应.
21.5.1 500 Server Internal Error
服务器遇到意外情况,无法满足请求.客户端可能会显示特定的错误条件,并可能在几秒钟后重试请求.
如果条件是临时的,服务器可能会使用retry After头字段指示客户端何时可以重试请求.
21.5.2 501 Not Implemented
服务器不支持满足请求所需的功能.当UAS无法识别请求方法并且无法为任何用户支持该方法时,这是适当的响应.(代理转发所有请求,而不考虑方法.)
请注意,当服务器识别请求方法,但不允许或不支持该方法时,将发送405(不允许方法).
21.5.3 502 Bad Gateway
服务器在充当网关或代理时,从其在尝试完成请求时访问的下游服务器接收到无效响应.
21.5.4 503 Service Unavailable
由于服务器临时过载或维护,服务器暂时无法处理请求.服务器可能会在retry After头字段中指示客户端何时应重试请求.如果没有给出重试后,客户端必须像收到500(服务器内部错误)响应一样进行操作.
接收503(服务不可用)的客户端(代理或UAC)应尝试将请求转发到备用服务器.在头字段(如果存在)后重试中指定的持续时间内,它不应将任何其他请求转发到该服务器.
服务器可能会拒绝连接或丢弃请求,而不是使用503(服务不可用)进行响应.
21.5.5 504 Server Time-out
服务器在试图处理请求时未收到来自其访问的外部服务器的及时响应.如果在来自上游服务器的Expires头字段中指定的时间段内没有响应,则应使用408(请求超时).
21.5.6 505 Version Not Supported
服务器不支持或拒绝支持请求中使用的SIP协议版本.服务器指示它无法或不愿意使用与客户端相同的主版本完成请求,除了此错误消息.
21.5.7 513 Message Too Large
服务器无法处理该请求,因为消息长度超出了其能力.
21.6 Global Failures 6xx
6xx响应表示服务器具有关于特定用户的确定信息,而不仅仅是Request-URI中指示的特定实例.
21.6.1 600 Busy Everywhere
已成功联系被叫方的终端系统,但被叫方正忙,此时不想接听电话.响应可能指示在重试后头字段中调用的更好时间.如果被叫方不希望透露拒绝呼叫的原因,被叫方将使用状态代码603(拒绝).只有当客户端知道没有其他端点(如语音邮件系统)将响应请求时,才会返回此状态响应.否则,应返回486(此处忙).
21.6.2 603 Decline
已成功联系被叫方的计算机,但用户明确不希望或无法参与.响应可能指示在重试后头字段中调用的更好时间.只有当客户端知道没有其他端点将响应请求时,才会返回此状态响应.
21.6.3 604 Does Not Exist Anywhere
服务器具有权威信息,即Request-URI中指示的用户不存在于任何位置.
21.6.4 606 Not Acceptable
已成功联系用户的代理,但会话描述的某些方面(如请求的媒体,带宽或寻址方式)不可接受.
606(不可接受)响应意味着用户希望通信,但不能充分支持所描述的会话.606(不可接受)响应可能在警告头字段中包含原因列表,说明所述会话不受支持的原因.第20.43节列出了警告原因代码.
响应中可能存在包含媒体功能描述的消息体,该消息体根据INVITE(或应用程序/sdp,如果不存在)中的Accept header字段进行格式化,与对OPTIONS请求的200(确定)响应中的消息体相同.
希望不会经常需要协商,并且当INVITE新用户加入现有会议时,协商可能不可能.由INVITE发起人决定是否对606(不可接受)响应采取行动.
只有当客户端知道没有其他端点将响应请求时,才会返回此状态响应.