http0.9/ 1.0 / 1.1 / 2.0 简单对比

310 阅读2分钟

http0.9/ 1.0 / 1.1 / 2.0 简单对比

HTTP (HyperText Transfer Protocol),超文本传输协议,基于 TCP/IP,用于客户端与服务端之间的通信。

http发展历程和各个版本的新增功能

http0.9

最早的http版本是1991年提出的HTTP/0.9,主要用途很简单,用于学术交流,传输html文档。所以也特别简单。

  1. 只有请求行,没有请求头和请求体。
  2. 服务器返回的数据也没有响应头。
  3. 返回的文件内容是以 ASCII 字符流来传输的,因为都是 HTML 格式的文件,所以使用 ASCII 字节码来传输是最合适的。

http1.0

随着网络的发展,想要网络中传输其他类型的文件,比如JavaScript、CSS、图片、音频、视频等。所以,支持多种类型的文件下载是 HTTP/1.0 的一个核心诉求。

  1. 增加了请求头。告诉服务器,请求的文件类型,接受的压缩形式和其他一些信息。
accept: text/html
accept-encoding: gzip, deflate, br
accept-Charset: ISO-8859-1,utf-8
accept-language: zh-CN,zh
  1. 增加了响应头。告诉浏览器(客户端)返回的数据类型,压缩形式等。
content-encoding: br
content-type: text/html; charset=UTF-8
  1. 增加了一些其他新特性:状态码,cache缓存,客户代理信息。

遗留问题

  • HTTP/1.0 每进行一次 HTTP 通信,都需要经历建立 TCP 连接,请求完就断开,效率极低。

http1.1

1.1是对1.0的缝缝补补。

  1. 增加持久连接,在一个 TCP 连接上可以传输多个 HTTP 请求,tcp连接复用。1.1默认开启Connection: keep-alive。同一个域名,最多同时建立6个tcp持久连接。
  2. 增加Host字段,表示请求的域名地址。
  3. 引入 Chunk transfer 机制,对动态生成的内容提供了完美支持。
  4. 引入了客户端 Cookie 机制和安全机制。

遗留问题

以下问题导致带宽利用不充分。

  • 队头阻塞。请求顺序还是串行的,需要前面的完成请求后,才能进行下一个请求。否则排队等。
  • TCP慢启动。
  • 多条TCP连接竞争固定带宽

htt2.0

  1. 新增多路复用,一个域名只使用一个 TCP 长连接来传输数据。通过二进制分帧层实现,将数据用ID标记,区分不同请求的数据。解决了下面问题。
  • 整个页面资源的下载过程只需要一次慢启动。
  • 并行请求。任何时候都可以发送请求无需等待,解决http队头阻塞问题。
  • 不存在竞争带宽问题。
  1. 可以设置请求的优先级。
  2. 服务器推送。
  3. 头部压缩。(请求头大小得到优化)

展望http3.0

基于新的QUIC协议,底层是基于UDP协议。离大规模使用还有很长的路要走。