HTTP 称为超文本传输协议(Hyper Text Transfer Protocol)是一个简单的请求-响应协议,它通常运行在 TCP 之上。
在1990年,HTTP 就成为 WWW 的支撑协议。当时由其创始人 WWW 之父蒂姆·伯纳斯·李(Tim Berners-Lee)提出,随后 WWW 联盟(WWW Consortium)成立,组织了 IETF(Internet Engineering Task Force)小组进一步完善和发布 HTTP。
HTTP 的报文由从客户机到服务器的请求和从服务器到客户机的响应构成。
请求报文指由客户机发送到服务器,格式如下:
请求行 - 通用信息头 - 请求头 - 实体头 - 报文主体
例如:
GET / HTTP/1.1 Host: www.hxstrive.com Connection: keep-alive Pragma: no-cache Cache-Control: no-cache User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 Cookie: JSESSIONID=B1C01DAA5DC87D425F62B5FC677E14EB;
响应报文指由服务器返回给客户机的报文,格式如下:
状态行 - 通用信息头 - 响应头 - 实体头 - 报文主体
例如:
HTTP/1.1 200 OK Server: nginx/1.20.1 Date: Tue, 28 Jun 2022 05:33:32 GMT Content-Type: text/html;charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Vary: Accept-Encoding Content-Language: zh-CN Cache-Control: max-age=86400 Content-Encoding: gzip ... body ...
后面将要介绍的 Fiddler 工具将会对我们发起的 HTTP 请求报文和收到的 HTTP 响应报文进行详细的解析,采用可视化的方式查看这些信息。以及拦截 HTTP 请求包和 HTTP 响应包,修改拦截到的 HTTP 包,进行更深入的测试和分析。
0.9 协议是适用于各种数据信息的简洁快速协议,但是远不能满足日益发展的各种应用的需要。0.9 协议就是一个交换信息的无序协议,仅仅限于文字。由于无法进行内容的协商,在双发的握手和协议中,并有规定双发的内容是什么,也就是图片是无法显示和处理的。
到了 1.0 协议阶段,也就是在1982年,Tim Berners-Lee 提出了 HTTP/1.0。在此后的不断丰富和发展中,HTTP/1.0 成为最重要的面向事务的应用层协议。该协议对每一次请求/响应建立并拆除一次连接。其特点是简单、易于管理,所以它符合了大家的需要,得到了广泛的应用。
在1.0协议中,双方规定了连接方式和连接类型,这已经极大扩展了 HTTP 的领域,但对于互联网最重要的速度和效率,并没有太多的考虑。毕竟,作为协议的制定者,当时也没有想到 HTTP 会有那么快的普及速度。
关于 HTTP1.1 协议的具体内容可以参考 RFC2616。
HTTP2.0 的前身是 HTTP1.0 和 HTTP1.1。虽然之前仅仅只有两个版本,但这两个版本所包含的协议规范之庞大,足以让任何一个有经验的工程师为之头疼。网络协议新版本并不会马上取代旧版本。实际上,1.0 和 1.1 在之后很长的一段时间内一直并存,这是由于网络基础设施更新缓慢所决定的。
关于 HTTP2.0 协议的具体内容可以参考 RFC7540。