简述 http 1.0,1.1,2.0 的主要区别
xxxixxxx

区别

  • http1.0 到 http1.1 的主要区别
    1. 从无连接到长连接,可连续发送请求。在一个 TCP 连接上可以传送多个 HTTP 请求和响应,减少了建立和关闭连接的消耗和延迟,在 HTTP1.1 中默认开启 Connection: keep-alive,一定程度上弥补了 HTTP1.0 每次请求都要创建连接的缺点。
    2. 具有 range 头可请求部分数据。
    3. host 头处理,在 HTTP1.0 中认为每台服务器都绑定一个唯一的 IP 地址,因此,请求消息中的 URL 并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个 IP 地址。HTTP1.1 的请求消息和响应消息都应支持 Host 头域,且请求消息中如果没有 Host 头域会报告一个错误(400 Bad Request)。
    4. 错误通知的管理,在 HTTP1.1 中新增了 24 个错误状态响应码。
  • http2.0 对比 1.X 版本主要区别
    1. 多路复用即连接共享,即每一个 request 都是用作连接共享机制的。一个 request 对应一个 id,这样一个连接上可以有多个 request。
    2. 服务端推送
    3. header 压缩,HTTP1.x 的 header 带有大量信息,而且每次都要重复发送,HTTP2.0 使用 encoder 来减少需要传输的 header 大小,通讯双方各自 cache 一份 header fields 表,既避免了重复 header 的传输,又减小了需要传输的大小。
    4. 新的二进制格式, HTTP1.x 的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认 0 和 1 的组合。基于这种考虑 HTTP2.0 的协议解析决定采用二进制格式。

http 1.0 特性

1. 无状态

服务器不跟踪不记录请求过的状态
对于无状态的特性可以借助 cookie/session 机制来做身份认证和状态记录

2. 无连接

浏览器每次请求都需要建立 tcp 连接

无连接导致的性能缺陷有两种:

  1. 无法复用连接
    每次发送请求,都需要进行一次 tcp 连接(即 3 次握手 4 次挥手),使得网络的利用率非常低
  2. 队头阻塞
    http1.0 规定在前一个请求响应到达之后下一个请求才能发送,如果前一个阻塞,后面的请求也给阻塞的

http 1.1 特性

为了解决 http1.0 的性能缺陷,http1.1 出现了

1. 长连接

http1.1 默认保持长连接,数据传输完成保持 tcp 连接不断开,继续用这个通道传输数据。
新增 Connection 字段,可以设置 keep-alive 值保持连接不断开。

2. 管道化

基于上面长连接的基础,管道化可以不等第一个请求响应继续发送后面的请求,但响应的顺序还是按照请求的顺序返回。

基于长连接的基础,我们先看没有管道化请求响应:
tcp 没有断开,用的同一个通道
请求1 > 响应1 --> 请求2 > 响应2 --> 请求3 > 响应3

管道化的请求响应:
请求1 --> 请求2 --> 请求3 > 响应1 --> 响应2 --> 响应3
即使服务器先准备好响应 2,也是按照请求顺序先返回响应 1
虽然管道化,可以一次发送多个请求,但是响应仍是顺序返回,仍然无法解决队头阻塞的问题

3. 缓存处理

当浏览器请求资源时,先看是否有缓存的资源,如果有缓存,直接取,不会再发请求,如果没有缓存,则发送请求。
新增字段 cache-control 来控制

4. 断点传输

在上传/下载资源时,如果资源过大,将其分割为多个部分,分别上传/下载,如果遇到网络故障,可以从已经上传/下载好的地方继续请求,不用从头开始,提高效率
在 Header 里两个参数实现的,客户端发请求时对应的是 Range 服务器端响应时对应的是 Content-Range

http 2.0 特性

1. 二进制分帧

将所有传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码

2. 多路复用

在共享 TCP 链接的基础上同时发送请求和响应
一个 Tcp 中多个 http 请求是并行的

3. 头部压缩

http2.0 使用 encoder 来减少需要传输的 header 大小,通讯双方各自 cache 一份 header fields 表,既避免了重复 header 的传输,又减小了需要传输的大小。

4. 服务器推送

服务器可以额外的向客户端推送资源,而无需客户端明确的请求

  • Post title:简述 http 1.0,1.1,2.0 的主要区别
  • Post author:xxxixxxx
  • Create time:2021-02-22 14:07:00
  • Post link:https://xxxixxx.github.io/2021/02/22/1000-018简述 HTTP 1.0,1.1,2.0 的主要区别/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
 Comments