HTTP1.0
特点:
- 每次请求都需要与服务器建立一个TCP连接,服务器处理完成后立即断开TCP连接
- 不跟踪每个浏览器的历史请求
缺点:
- 连接无法复用-每次请求都需建立一个TCP连接,费时费力。
- 队头阻塞(Head of Line Blocking)下一个请求必须再前一个请求响应到达后发送。如果某请求一直不到达,那么下一个请求就一直不发送。
HTTP1.1
特点:
- 支持长连接(PersistentConnection)通过Keep-Alive保持HTTP连接不断开,避免重复建立TCP连接
- 管道化(pipelining) 通过长连接实现在一个连接中传输多个文件
- 加入缓存处理 【新字段 cache-control】
- 支持断点续传
- 增加了Host字段(允许一个服务器创建多个web站点)
缺点:
- 队头阻塞仍未解决(管道化,服务端仍需按顺序传输,如果前一个文件未收到,后面的文件无法传输)
HTTP2
核心:
SPeeDY(二进制分帧层)
通过在应用层和传输层间增加一个二进制分帧层,突破HTTP1.1的性能限制、改进传输性能
特点:
- 多路复用(实现正真的并行传输,在一个TCP上进行任意数量HTTP请求 基于【二进制分帧】的特性)
- 头部压缩
- 服务器推送
缺点:
- TCP的队头阻塞没有彻底解决
- TCP的”超时重传“机制。当HTTP2出现丢包时,整个TPC都要等待重传,那会阻塞该TCP连接中的所有请求
- TCP及TCP+TLS建立连接的延时
- 多路复用容易超时
- 多路复用导致服务器压力上升
HTTP3
核心:
使用了基于UDP的QUIC协议,完美解决”队头阻塞“问题。
特点:
- 改进拥塞机制,可靠传输
- 快速握手
- 集成TLS1.3加密
- 多路复用
- 连接迁移