0.9

  • 只支持 Get
  • 只能以 html 格式响应
  • 每次请求-响应都建立-关闭 TCP 连接

1.0

  • 可发送任何内容
  • 支持 POST HEAD
  • 增加 HTTP HEADER
  • 状态码(status code)、多字符集支持、多部分发送(multi-part type)、权限(authorization)、缓存(cache)、内容编码(content encoding)

1.1

  • 使用 TCP 长连接,多个请求可使用同一个连接
    这里需要注意一下(1.0 中已经存在长连接,但是默认不开启,原因在于 http 可能会对传输内容做压缩,那么最初响应中的 Content-length 会失效,无法区分一个连接中的两个响应,在 1.1 中使用分块解决了这个问题)
  • 管道机制,在收到上一个请求的响应前可以发送下一个请求(服务端还是需要按顺序返回)
  • Content-length 用于区分响应失效
  • 增加 PUT、PATCH、HEAD、 OPTIONS、DELETE

2.0

  • 支持 SPDY 协议,SPDY 是 Speedy 的谐音,意为 “更快”。它是 Google 开发的基于 TCP 协议的应用层协议。目标是优化 HTTP 协议的性能,通过压缩、多路复用和优先级等技术,缩短网页的加载时间并提高安全性。SPDY 协议的核心思想是尽量减少TCP 连接数。SPDY 并不是一种用于替代 HTTP 的协议,而是对 HTTP 协议的增强。
  • 二进制传输
  • 多路复用
    帧(frame)和流(stream)。
    帧是最小的数据单位,每个帧会标识出该帧属于哪个流,流是多个帧组成的数据流。
    所谓多路复用,即在一个TCP连接中存在多个流,即可以同时发送多个请求,对端可以通过帧中的表示知道该帧属于哪个请求。在客户端,这些帧乱序发送,到对端后再根据每个帧首部的流标识符重新组装。通过该技术,可以避免HTTP旧版本的队头阻塞问题,极大提高传输性能。
  • Header压缩
    使用了HPACK(HTTP2 头部压缩算法)压缩格式对传输的header进行编码,减少了header的大小。并在两端维护了索引表,用于记录出现过的header,后面在传输过程中就可以传输已经记录过的header的键名,对端收到数据后就可以通过键名找到对应的值。
  • 服务器 Push(在浏览器兼容的情况下也可以使用prefetch)
  • 通过黑名单机制禁用了几百种不再安全的加密算法