HTTP是应用级协议,它适应了分布式超媒体协作系统对灵活性及速度的要求。它是一个一般的、无状态的、基于对象的协议,通过对其请求方法(request methods)进行扩展,可以被用于多种用途,比如命名服务器(name server)及分布式对象管理系统。 HTTP 的一个特性是其数据表现类型允许系统的构建不再依赖于要传输的数据。 HTTP 自从 1990 年就在 WWW 上被广泛使用。该规范反映了“HTTP/1.0”的普通用
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:客户端出错 - 请求有语法错误或无法实现。