http 系列(一):http各个版本区别

272 阅读2分钟

前言

http版本分 http0.9,http1.0,http1.1,http2.0,http3.0,分别对比下解决了什么问题。

http0.9

第一个版本的http请求,基于tcp实现,当时的需求就是:用来传输体积很小的html页面。 基于这个需求,当时的实现有三个特点:

  1. 第一个是只有一个请求行,并没有HTTP 请求头和请求体,因为只需要一个请求行就可以完整表达客户端的需求了
  2. 第二个是服务器也没有返回头信息,这是因为服务器端并不需要告诉客户端太多信息,只需要返回数据就可以了。
  3. 第三个是返回的文件内容是以 ASCII 字符流来传输的,因为都是 HTML 格式的文件,所以使用 ASCII 字节码来传输是最合适的。

http 1.0

因为后来需求越来越多了,浏览器展示的东西也越来越多了。所以有了以下实现:

  1. 从开始的html文件类型到多类型文件。
  2. 服务器无法处理的请求需要告知浏览器,所以引入了状态码。
  3. cache缓存机制。
  4. 服务器需要统计客户端类型,请求头引入了代理字段。 基于以上需求实现了http1.0。

http1.1

因为http1.0无法满足需求,所以对http1.0进行大量更新,同时发布1.1版本。 实现:

  1. http是无状态请求,所以引入了cookie机制。
  2. http1.0每次都需要重新建立tcp链接,为了减少消耗,引入了keep-alive机制。
  3. 提供虚拟机的支持,增加了host字段。
  4. 对动态生成的内容提供了完美的支持。

http2.0

虽然http1.1引入了长链接机制,但是存在http对头堵塞的问题。 实现:

  1. 实现了多路复用,解决了http1.1中的http对头堵塞问题。
  2. 可以设置请求的优先级。
  3. 服务器推送。
  4. 头部压缩。

http3.0

虽然http2.0解决了http对头堵塞的问题,但是由于tcp的应答机制,还是存在了tcp对头堵塞。http3.0为了解决这个问题,又为了兼容中间设备(是指路由器,交换器等产品,只支持tcp+udp协议),所以就使用了udp协议,自己实现了一套tcp的数据包丢失的重发机制。

PS:tcp跟udp核心差别:1. tcp需要建立连接;2. tcp有丢包重发机制。

http3.0实现:

  1. 丢包重发机制。
  2. http2.0的多路复用。
  3. 集成了tls的加密功能(tls1.3)。

总结

其实这些协议的升级都是基于用户的需求,从一开始的单类型支持,到后面的多路复用,都是为了解决实际的问题的。