HTTP报文格式
HTTP报文有两种:HTTP请求报文、HTTP响应报文,具体分析如下。
一、HTTP请求报文格式
请求报文由三部分组成:请求行(request line)、首部行(header line)、实体体(entity body)。
先上图

(注:SP代表空格,CR代表回车,LF代表换行)
(注:图片摘自《计算机网络 自顶向下方法(第7版)》 图2-8)
示例:
GET /dir1/dir2/hello.html HTTP/1.1 Host:www.test.com Connection:close User-agent:Mozilla/5.0 Accept-language:zh-cn
我们通过分析示例来讲解:
1、请求行
请求行有三个字段:方法、URL、HTTP版本
(1)方法:可以取不同的值,包括GET、POST、HEAD、PUT和DELETE等。绝大部分HTTP请求报文使用GET方法。
(2)URL:请求对象的标识。示例中请求对象标识就是:/dir1/dir2/hello.html
(3)HTTP版本:略。示例中HTTP版本为1.1。
2、首部行
首部行由多组键值对(首部字段名:首部字段值)组成。下面分析示例:
Host:指明请求对象所在主机。示例中主机为www.test.com。
Connection:浏览器告知服务器是否使用持续连接。示例中close代表不使用持续连接。
User-agent:指明用户代理,即浏览器类型。示例中浏览器类型为Mozilla/5.0。
Accept-language:指明用户希望得到请求对象的语言版本。示例中zh-cn代表中文版本。
3、实体体
使用GET方法时,实体体为空;
而使用POST方法时才使用实体体,举例说明:
当用户提交表单时,HTTP使用POST方法,则实体体内包含的就是用户在表单的输入值。
二、HTTP响应报文格式
响应报文由三部分组成:状态行(status line)、首部行(header line)、实体体(entity body)。
继续上图

(注:SP代表空格,CR代表回车,LF代表换行)
(注:图片摘自《计算机网络 自顶向下方法(第7版)》 图2-9)
示例:
HTTP/1.1 200 OK Connection:close Date:Fri, 29 Jan 2021 21:13:06 GMT Server:Apache/2.2.3(CentOS) Last-Modified:Fri, 29 Jan 2021 21:11:56 GMT Content-Length:6821 Content-Type:text/html (data data data data ...)
我们继续分析示例:
1、状态行:
状态行有三个字段:HTTP版本、状态码、状态信息
(1)HTTP版本:略。
(2)状态码及状态信息:下面列出常见状态码及状态信息
- 200 OK:请求成功,信息在返回的响应报文中。
- 301 Moved Permanently:请求对象被永久转移了,新的URL定义在响应报文的首部行Location中。客户端自动获取新的URL。
- 404 Not Found:被请求的文档不在服务器上。
- 505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本。
2、首部行
同样的,首部行由多组键值对(首部字段名:首部字段值)组成。下面分析示例:
Connection:服务器通知客户,发送完报文后是否持续该TCP连接。示例中close代表发送完报文后关闭该TCP连接。
Date:服务器产生并发送该响应报文的日期时间。
Server:指明产生响应报文的服务器类型,类似于请求报文首部行中User-agent字段。示例中为Apache Web服务器。
Last-Modified:对象创建或者最后修改的日期时间。
Content-Length:被发送对象中的字节数。
Content-Type:实体体中对象类型。示例中 text/html 代表HTML文件。
3、实体体
服务器响应客户端的数据对象,在请求示例中,请求对象为hello.html,那么该实体体内容就是hello.html。
若便于理解,为大家准备了一份思维导图:


浙公网安备 33010602011771号