一、简介
从web客户端发往web服务器的http报文称为请求报文(request message),从服务器发往客户端的报文称为响应报文(response message),此外没有其它类型的http报文。
http请求和响应报文的格式很类似,都包括以下3个部分:
-
起始行(start line)
报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况。 -
首部字段(header)
起始后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,为了便于解析,两者之间用冒号(:)来分隔。首部以一个空格结束。添加一个首部字段和添加新行一样简单。 -
主体(body)
空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包括了要发送给web服务器的数据;响应主体中装载了要返回给客户端的数据。起始行和首部都是文本形式且都是结构化的,而主体则不同,主体中可以包含任意的二进制数据(比如图片、视频、音轨、软件程序)。当然,主体中也可以包含文本。
二、语法
请求报文与响应报文只有起始行的语法有所不同。
1、请求报文:
<method> <request-URL> <version>
<headers>
<entity-body>
如:
GET /test/hi.txt HTTP/1.1
Accept: text/*
Host: www.test.com
2、响应报文:
<version> <status> <reason-phrase>
<headers>
<entity-body>
如:
HTTP/1.1 200 OK
Content-type: text/plain
Content-length: 19
Hi! I'm a message!
三、抓包
我们常用的HTTP抓包工具有如fiddler、firebug等,大家根据自己的喜好选择自己的工具。
如下是我使用firebug抓取到的一个http请求及响应包:
四、首部
HTTP首部字段可以分为如下几类:通用首部、请求首部、响应首部、实体首部、扩展首部。
每个HTTP首部都有一种简单的语法:名字后面跟着冒号(:),然后跟上可选空格,再跟上字段值,最后是一个CRLF。
1、通用首部
有些首部提供了与报文相关的最基本信息,它们被称为通用首部。客户端和服务器都可以使用这些通用首部。
首部 | 描述 | 举例 |
---|---|---|
Connection | 允许客户端和服务器端指定与请求/响应连接有关的选项 | Connection: close |
Date | 报文创建的日期和时间 | Date: Tue, 3 Oct 1974 02:16:00 GMT |
MIME-Version | 给出了发送端使用的MIME版本 | MIME-Version: 1.0 |
Trailer | 说明报文拖挂中提供了哪些首部 | Trailer: Content-Length |