# HTTP的发展历史

# HTTP0.9

  • 只有一个命令GET
  • 没有header等描述数据的信息
  • 服务器发送完毕,就关闭TCP连接​​

# HTTP1.0

  • 增加了很多命令
  • 增加status codeheader
  • 多字符集支持、多部分发送、权限、缓存等

# HTTP1.1

  • 持久连接(connection: keep-alive)
  • pipeline(浏览器允许并发发送http请求)
  • 增加host和其他一些命令
  • 一个物理服务器可以部署多个接口/服务

# HTTP2

要使用HTTP2,必须使用HTTPS

# 信道复用

同域使用一个TCP连接并发发送http请求

# 分帧传输

帧中有前后,接受到消息会根据帧中的信息拼接信息。因此支持并发

# Server Push(服务器推送)

推送资源的限制:必须是可缓存、安全的、不能带有请求体。

场景:请求一个html资源,会把相关的css、js一同push过来,可以减少HTTP请求

# 头信息压缩

二进制发送信息

# HTTP3

使用QUIC协议,由Google在15年提出的SPDY v3演化而来

QUIC协议(Quick UDP Internet Connections)基于传输层的UDP协议(升级版的UDP)

减少了TCP三次握手及TLS握手(安全https)的时间,UDP没有连接概念,建立连接只需一次交互:

QUIC的连接分两种情况,首次连接和非首次连接

  • 首次连接时,类似TLS协议,通过dh算法(类似非对称加密)生成config,然后缓存下来,缓存有时效
  • 非首次连接时,直接通过缓存的config连接。缓存失效重新连接

QUIC可以实现连接迁移

  • QUIC基于的UDP,使用64位随机数所为连接ID,wifi切换到4G时,不会重新建立连接
  • TCP使用五元组来表示唯一连接,wifi切换到4G时,ip变化需要重新建立TCP连接