HTTP协议(二)HTTP报文详解

时间:2021-04-03 04:39:30

前面说到,HTTP事务是由HTTP报文的格式化数据块进行通信的,本文就详细介绍一下HTTP报文的组成和结构。

HTTP报文是由一行一行的简单字符串组成的。由于HTTP报文都是纯文本,所以你可以很方便的对其进行读写。

下图显示一个简单的HTTP事务的报文:

 

 HTTP协议(二)HTTP报文详解

 

 

 

 

 

 

 

 

 

 

 

从客户端发往服务器的报文叫请求报文(request message),服务器收到请求报文后,作为响应发往客户端的报文称为响应报文(response message),请求报文和响应报文的格式都是一样的,HTTP报文格式主要包含三个部分:

起始行:

请求报文的起始行说明这个HTTP请求的需求【如上图中的:GET /index_page.html HTTP/1.0 说明:要向服务器通过GET方法获取  /index_page.html 资源,HTTP协议版本为HTTP/1.0】

响应报文的起始行 说明服务器的响应情况【如上图中的:HTTP/1.0 200 OK,说明服务器的响应情况为 200 OK】

 

首部字段:

在HTTP的报文起始行后面往往会有多个首部字段(非必须),这些字段都以 Key:value的格式发出,首部以一个空行结束(空行后面就是主体,也可能没有主体)

如上图中的请求报文中的首部字段有:

Accept:text/html,application/xhtml+xml,application/xml;
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.8
Connection:keep-alive
Cookie:balabala....
Host:www.myweb.com

响应报文中的首部字段有:

Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/html; charset=utf-8
Date:Thu, 29 Mar 2018 08:20:03 GMT
Server:openresty
Transfer-Encoding:chunked

 

主体:

报文主体就是报文的主要数据部分,它可以是任意数据类型的数据。比如请求主体中包含了要发给服务器的数据,响应主体中装载了要返回给客户端的数据。

起始行和首部都是文本化且具有特定结构的,主体则可包含所有二进制数据和文本。

 

下面介绍一个HTTP报文实例:

HTTP协议(二)HTTP报文详解

HTTP协议(二)HTTP报文详解

 

这个是Google Chrome 开发者模式下的HTTP请求抓包数据,下面解释这个报文:

HTTP协议(二)HTTP报文详解

 

HTTP协议(二)HTTP报文详解

HTTP报文便于阅读,但不好的地方在于解析起来不太方便。

 

 

HTTP /1.1 首部字段说明:

HTTP首部字段有很多,这里列举说明一下HTTP/1.1 的首部字段:

通用首部字段

HTTP协议(二)HTTP报文详解

 

请求首部字段:

HTTP协议(二)HTTP报文详解

 

响应首部字段 :

HTTP协议(二)HTTP报文详解

实体首部字段:

HTTP协议(二)HTTP报文详解

非HTTP/1.1中使用到的首部字段还有 Cookie、 Set-Cookie 和 Content-Disposition 等在其他 RFC 中定义的首部字段的使用频率也很高。

这些非正式的首部字段统一归纳在 RFC4229 HTTP Header Field Registrations 中。

参考:

《HTTP权威指南》