HTTP协议(RFC中文版)-66. 回应 - shen.falcon

来源:百度文库 编辑:神马文学网 时间:2024/04/27 15:55:58
HTTP协议(RFC中文版)-6. 回应

6.  回应(Response

 在接收、解释请求消息后,服务器端返回HTTP回应消息。

Response   = Simple-Response | Full-Response

Simple-Response  = [ Entity-Body ]

Full-Response  = Status-Line    ; Section 6.1
                         *( General-Header   ; Section 4.3
                          | Response-Header  ; Section 6.2
                          | Entity-Header )   ; Section 7.1
                         CRLF
                         [ Entity-Body ]   ; Section 7.2
 
 
当请求是HTTP/0.9的或者服务器端只支持HTTP/0.9时,只能以Simple-Response方式
回应。如果客户端发送HTTP/1.0完整请求后,接收到的回应不是以状态行(Status-Line
开头的,客户端将其视为简单回应,并相应对其进行分析。注意,简单请求只包括实体主体,
它在服务器端关闭连接时终止。


6.1  状态行(Status-Line
 
 
完整回应消息的第一行就是状态行,它依次由协议版本、数字形式的状态代码、及相应
的词语文本组成,各元素间以空格(SP)分隔,除了结尾的CRLF外,不允许出现单独的
CR
LF符。

 

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
 
 
状态行总是以协议版本及状态代码开头,如:
 
"HTTP/" 1*DIGIT "." 1*DIGIT SP 3DIGIT SP
 
(如,"HTTP/1.0 200")。
 
这种表示方式并不足以区分完整请求和简单请求。简单回应可能允许这种表达式出现在
实体主体的开始部分,但会引起消息的误解。因为大多数HTTP/0.9的服务器都只能回
"text/html"类型,在这种情况下,不可能产生完整的回应。


6.1.1
状态代码和原因分析(Status Code and Reason
Phrase

 状态代码(Status-Code)由3位数字组成,表示请求是否被理解或被满足。原因分析是
用简短的文字来描述状态代码产生的原因。状态代码用来支持自动操作,原因分析是为人类
用户准备的。客户端不需要检查或显示原因分析。
 
 
状态代码的第一位数字定义了回应的类别,后面两位数字没有具体分类。首位数字有5
种取值可能:

o 1xx::保留,将来使用。

o 2xx:成功 - 操作被接收、理解、接受(received, understood, accepted)。

o 3xx:重定向(Redirection)-要完成请求必须进行进一步操作。

o 4xx:客户端出错 - 请求有语法错误或无法实现。

o 5xx:服务器端出错 -服务器无法实现合法的请求。
HTTP/1.0
的状态代码、原因解释在下面给出。下面的原因解释只是建议采用,可任意
更改,而不会对协议造成影响。完整的代码定义在第9节。
       Status-Code    = "200"   ; OK
                      | "201"   ; Created
                      | "202"   ; Accepted
                      | "204"   ; No Content
                      | "301"   ; Moved Permanently
                      | "302"   ; Moved Temporarily
                      | "304"   ; Not Modified
                      | "400"   ; Bad Request
                      | "401"   ; Unauthorized
                      | "403"   ; Forbidden
                      | "404"   ; Not Found
                      | "500"   ; Internal Server Error
                      | "501"   ; Not Implemented
                      | "502"   ; Bad Gateway
                      | "503"   ; Service Unavailable
                      | extension-code

       extension-code = 3DIGIT

       Reason-Phrase  = *

 HTTP状态代码是可扩展的,而只有上述代码才可以被当前全部的应用所识别。HTTP
应用不要求了解全部注册的状态代码,当然,如果了解了更好。实际上,应用程序必须理解
任何一种状态代码,如果碰到不识别的情况,可根据其首位数字来判断其类型并处理。另外,
不要缓存无法识别的回应。

 例如,如果客户端收到一个无法识别的状态码431,可以安全地假定是请求出了问题,
可认为回应的状态码就是400。在这种情况下,用户代理应当在回应消息的实体中通知用户,
因为实体中可以包括一些人类可以识别的非正常状态的描述信息。


6.2 
回应标题域(Response Header Fields
 
回应标题域中包括不能放在状态行中的附加回应信息。该域还可以存放与服务器相关的
信息,以及在对请求URI所指定资源进行访问的下一步信息。

Response-Header = Location    ; Section 10.11
| Server    ; Section 10.14
| WWW-Authenticate ; Section 10.16
 
 
回应标题域名只有在与协议版本的变化结合起来后,才能进行可靠的扩展。实际上,新
的或实验中的标题域只要能被通讯各方识别,其语法就可使用,而无法识别的标题域都将被
视为实体域。