http各个版本的区别

106 阅读3分钟

1.1版本之前

只支持get head请求, 一次连接过程中只能发送一次请求,请求结束就关闭连接

1.1版本

  1. 连接复用,一次连接成功过后可以发送多次请求(只支持串行,同一时间只能发送一个请求,一个一个发)
  2. 只能由客户端发起, 一个请求只能对应一个响应, 而且响应只能是对应的格式
  3. 同一个会话的多次请求中,头信息会被重复传输(通常会给每个传输增加 500~800 字节的开销, 如果使用 Cookie,增加的 开销有时会达到上千字节)

2.0版本

  1. 是基于 tcp 和 https 的, 在中间加了一层 spdy 一些基本概念: 已建立的连接内的双向字节流,可以承载一条或多条消息, 所有通信都在一 个 TCP 连接上完成,此连接可以承载任意数量的双向数据流 消息:与逻辑 HTTP 请求或响应消息对应,由一系列帧组成, 帧:HTTP/2 通信的最小单位,每个帧都包含帧头(会标识出当前帧所属的 数据流)� 来自不同数据流的帧可以交错发送,然后再根据每个帧头的数据 流标识符重新组装

  2. 二进制: HTTP/2 采用二进制格式传输数据,而非 HTTP/1.1 的文本格式

  3. 多路复用:客户端和服务器可以将 HTTP 消息分解为互不依赖的帧,然后交错发送, 最后再在另一端把它们重新组装起来 并行交错地发送多个请求,请求之间互不影响 并行交错地发送多个响应,响应之间互不干扰 使用一个连接并行发送多个请求和响应

  4. 优先级: HTTP/2标准允许每个数据流都有一个关联的权重和依赖关系, 可以向每 个数据流分配一个介于 1 至 256 之间的整数, 每个数据流与其他数据流之间可 以存在显式依赖关系 客户端可以构建和传递“优先级树”,表明它倾向于如何接收响应 服务器可以使用此信息通过控制 CPU、内存和其他资源的分配设定数据 流处理的优先级, 在资源数据可用之后,确保将高优先级响应以最优方式传输 至客户端

  5. 头部压缩:HTTP/2 使用 HPACK 压缩请求头和响应头, 可以极大减少头部开销,进而 提高性能

  6. 服务器推送 服务器可以对一个客户端请求发送多个响应 除了对最初请求的响应外,服务器还可以向客户端推送额外资源,而无 需客户端额外明确地请求 不足: 队头阻塞, 握手延迟

3.0版本

改为使用基于 UDP 协议的 QUIC+tls 协议实现, 可以保证可靠传输