HTTP/0.9
需求就是用来传输体积很小的 HTML 文件
特点:
- 只有一个请求行,没有请求头和请求体
- 服务器也没有响应头信息
- 返回的文件内容是以 ASCII 字符流来传输
HTTP/1.0
特点:
- 任何格式的内容都可以发送,这使得互联网不仅可以传输文字,还能传输图像、视频、二进制等文件。
- 提供 Cache 机制,使用 header 中的 If-Modified-Since 和 Expires 作为缓存失效的标准。
- 引入状态码
- 除了GET命令,还引入了POST命令和HEAD命令。
- http请求和回应的格式改变,除了数据部分,每次通信都必须包括头信息(HTTP header),用来描述一些元数据(引入用户代理的字段)。
问题:
- TCP 连接无法复用,每次请求都需要重新建立 TCP 连接
- 队头阻塞 (如果 TCP 通道中的某个请求因为某些原因没有及时返回,那么久会阻塞后面的所有请求,称之为队头阻塞问题)
HTTP/1.1
特点:
- 增加了持久连接,同个域名下默认允许同时建立 6 个TCP 持久连接
- 增加了与缓存相关的请求头
- 支持使用 range 头等来支持断点续传
- 新增 Host 请求头,用来表示当前的域名地址,提供虚拟主机的支持
- 引入客户端 Cookie 机制和安全机制
问题:
- 没有解决队头阻塞的问题
- TCP 慢启动
- TCP 连接之间相互竞争带宽
- 明文传输,安全性有隐患
- header 中携带内容过多,增加了传输成本
HTTP/2.0
特点:
- 一个域名只使用一个 TCP 长连接来传输数据,这样整个页面资源的下载过程只需要一次慢启动,同时避免了多个 TCP 连接竞争带宽带来的问题。
- 多路复用机制,将请求分成一帧一帧的数据去传输,于是数据需要经过二进制分帧层处理,转换为一个个带有请求ID编号的帧
- 可以设置请求的优先级
- 服务器推送
- 头部压缩
- 流控制