HTTP是应用级协议,它适应了分布式超媒体协作系统对灵活性及速度的要求。它是一个一般的、无状态的、基于对象的协议,通过对其请求方法(request methods)进行扩展,可以被用于多种用途,比如命名服务器(name server)及分布式对象管理系统。 HTTP 的一个特性是其数据表现类型允许系统的构建不再依赖于要传输的数据。 HTTP 自从 1990 年就在 WWW 上被广泛使用。该规范反映了“HTTP/1.0”的普通用
4. HTTP 消息(HTTP Message)
4.1 消息类型(Message Types)
HTTP消息由客户端到服务器的请求和由服务器到客户端的回应组成。
HTTP-message = Simple-Request ; HTTP/0.9 messages
| Simple-Response
| Full-Request ; HTTP/1.0 messages | Full-Response
完整的请求(Full-Request)和完整的回应(Full-Response)都使用RFC822[7]中实体传输部分规定的消息格式。两者的消息都可能包括标题域(headers,可选)、实体主体(entity body)。实体主体与标题间通过空行来分隔(即CRLF前没有内容的行)。 Full-Request = Request-Line ; Section 5.1
*( General-Header ; Section 4.3 | Request-Header ; Section 5.2 | Entity-Header ) ; Section 7.1 CRLF
[ Entity-Body ] ; Section 7.2 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
简单请求(Simple_Request)与简单回应(Simple-Response)不允许使用任何标题信息,并限制只能使用唯一的请求方法(GET)
Simple-Request = "GET" SP Request-URI CRLF
Simple-Response = [ Entity-Body ]
不提倡使用简单方式请求格式,因为它防止了服务器在接到简单请求时对返回实体的介质类型进行验证。
4.2 消息标题(Message Headers)
HTTP标题域,包括主标题(General-Header,4.3节)、请求标题(Request-Header ,5.2节)、回应标题(Response-Header ,6.2节)及实体标题(Entity-Header,7.1节),都遵照RFC822-3.1节[7]给出的通用格式定义。每个标题域由后紧跟冒号的名字,单空格(SP),字符及域值组成。域名是大小写敏感的。虽然不提倡,标题域还是可以扩展成多行使用,只要这些行以一个以上的SP或HT开头就行。
HTTP-header = field-name ":" [ field-value ] CRLF
field-name = token