http协议在网络模型中处于应用层的协议,本身不传输数据包,只是规定了客户端和服务器端之间的通信格式。从http诞生以来,经历了多个版本之间的更新,目前总共有5个版本,最新版本已经到了http3.0,下面我们来看看各版本之间的差异。
一、HTTP 0.9
HTTP 0.9是最初的HTTP协议,已经过时。
特点:
- 只支持GET请求
- 没有协议头
- 无状态性
- 只能传输超文本
这里的无状态性指在客户端发送请求,服务器接收请求并返回结果给客户端后,客户端和服务器的连接会马上断开。这一特性在后面版本的HTTP中也一样。
二、HTTP 1.0
这一版本在请求和响应中加入了HTTP版本号,这一特点在之后的版本中保持不变。
相对于HTTP 0.9 新增以下特性:
- 除了GET命令,新增了POST和HEAD命令
- 不再只接收HTML格式数据,可以设置contentType传输多种数据格式
- 新增状态码(status code)、多字符集支持、多部分发送(multi-part type)、权限(authorization)、缓存(cache)、内容编码(content encoding)等
三、HTTP 1.1
这是目前最流行的HTTP协议,我在有时候做一些小网站的时候也会使用。
相对于HTTP 1.0 新增以下特性:
- 引入了持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用。
- 请求和响应都支持Host头域,认为每一个服务器都绑定唯一的一个IP地址。
- 字节范围请求:若客户端此时已经有一部分数据,为节省带宽,可以只向服务器端请求一部分数据,这个功能在请求头的range头域实现。
- 新增了一批Request method:HTTP1.1增加了OPTIONS,PUT, DELETE, TRACE, CONNECT方法
四、HTTP 2.0
为了解决1.1版本利用率不高的问题,提出了HTTP/2.0版本。但目前似乎还没流行起来。
主要新增特性:
- 增加双工模式,也就是不经客户端可以同时发送多个请求,服务器端也能处理多个请求,以此来提高利用率,也是这个版本最大亮点。
- 服务器推送:不经请求向客户端发送数据
- 二进制分帧层
- 数据流:将每个请求或相应的所有数据包称为一个数据流,每个数据流有一个ID,规定客户端发出的ID为奇数,服务器端发出的ID为偶数;客户端还可以设置优先级,优先级越高,服务器越优先处理
- 头信息压缩机制:由于HTTP很多请求头信息中的字段都一样,可以先压缩后发送,而且客户端和服务器端可以同时维护一张头信息表,只用穿输索引号,大大提高效率
五、HTTP3.0
HTTP3.0 在2018年发布,基于谷歌的QUIC,底层使用udp代码tcp协议。
主要提升:
- 使用stream进一步扩展HTTP2.0 的多路复用,传输多少文件就可以产生多少stream,若发生丢包,只需要传输丢失的stream
- 基于UDP,提高了传输效率,降低延迟
- 通过引入 Connection ID,使得 HTTP/3 支持连接迁移以及 NAT 的重绑定
- HTTP/3 含有一个包括验证、加密、数据及负载的 built-in 的 TLS 安全机制