Http1.0/Http1.1/Http2.0的区别

Http1.0

Http1.0是一种无状态、无连接的应用层协议。

HTTP1.0规定浏览器和服务器保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器处理完成后立即断开TCP连接(无连接),服务器不跟踪每个客户端也不记录过去的请求(无状态)。

Http1.0的导致的问题
  1. 无复用连接

每发送一次网络请求都要进行一次TCP连接;而TCP得连接和释放又比较耗费时间(每次都需要三次握手和四次挥手);这种无连接的特性会使得网络的利用率非常低。

  1. 队头阻塞

HTTP1.0规定下一个请求必须在前一个请求响应到达之后才能发送。假设前一个请求响应一直不到达,那么下一个请求就不发送,同样的后面的请求也给阻塞了。

Http1.1

为了解决Http1.0的一些问题,Http1.1出现了;
对于 HTTP/1.1,不仅继承了 HTTP1.0简单的特点,还克服了诸多 HTTP1.0性能上的问题。

Http1.1的新增特点
  1. 持久化连接
    通过设置 Connection:keep-alive 来实现持久化连接(长连接),即多个请求和响应可以利用同一个 TCP 连接,而不是每一次请求响应都要新建一个TCP连接。
  2. 增加管道机制
    管道化使得请求能够“并行”传输。而‘响应’依旧是一个一个返回。并没有真正意义上的解决队头阻塞问题;
    但是,当出现队头阻塞时,浏览器会建立多个TCP连接;
管道机制
  1. 分块传输
    在 HTTP/1.1 版本中,可以不必等待数据完全处理完毕再返回,服务器产生部分数据,那么就发送部分数据,很明此种方式更加优秀一些,可以节省很多等待时间。

  2. 增加 host 字段
    使得一个服务器能够用来创建多个 Web 站点。

  3. 错误提示
    HTTP/1.1 引入了一个 Warning 头域,增加对错误或警告信息的描述,此外,在 HTTP/1.1 中新增了24个状态响应码(100,101,203,205,206,301,305… )。

  4. 带宽优化
    HTTP1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,客户端接收到100才开始把请求body发送到服务器;如果返回401,客户端就可以不用发送请求body了节约了带宽。

  5. 缓存处理
    HTTP1.1还加入了缓存处理(强缓存和协商缓存[传送门])新的字段如cache-control

Http2.0

HTTP 2.0的目标:改进传输性能

HTTP 2.0 的主要目标是改进传输性能,实现低延迟和高吞吐量。从另一方面看,HTTP 的高层协议语义并不会因为这次版本升级而受影响。所有HTTP 首部、值,以及它们的使用场景都不会变。

Http2.0新增特点

1. 多路复用(连接共享)

多路复用的一些概念:

  • 流(stream):已建立连接上的双向字节流。
  • 消息:与逻辑消息对应的完整的一系列数据帧。
  • 帧(frame):HTTP2.0通信的最小单位,每个帧包含帧头部,至少也会标识出当前帧所属的流(stream id)。

一次Http请求响应对应会建立一个双向字节流;每一流有自己的 Stream ID
每个数据流以消息的形式发送,而消息由一或多个帧组成。这些帧可以乱序发送,然后再根据每个帧头部的流标识符(stream id)重新组装。

所有的HTTP2.0通信都在一个TCP连接上完成,这个连接可以承载任意数量的双向数据流。

另外,多路复用(连接共享)可能会导致关键请求被阻塞。HTTP2.0里每个数据流都可以设置优先级和依赖,优先级高的数据流会被服务器优先处理和返回给客户端,数据流还可以依赖其他的子数据流。

2. 头部压缩

HTTP1.1 不支持 header 数据的压缩,HTTP/2.0 使用 HPACK 算法对 header 的数据进行压缩,这样数据体积小了,在网络上传输就会更快。高效的压缩算法可以很大的压缩 header ,减少发送包的数量从而降低延迟。

3. 服务器推送

在 HTTP/2 中,服务器可以对客户端的一个请求发送多个响应,即服务器可以额外的向客户端推送资源,而无需客户端明确的请求。

总结

HTTP1.1

  • 持久连接
  • 请求管道化
  • 增加缓存处理(新的字段如cache-control)
  • 增加Host字段、支持断点传输等

HTTP2.0

  • 多路复用(或连接共享)(基于二进制分帧)
  • 头部压缩
  • 服务器推送

你可能感兴趣的:(Http1.0/Http1.1/Http2.0的区别)