http版本
http1.1
- keep-alive使得http请求可以复用TCP连接,从而降低建立连接的耗时(2次round trip)
- 队头阻塞问题限制并发性能(通过减少请求或域名切片优化)
- 无状态,多次请求可能需要重复发送cookie用来维护会话,导致请求体积增大影响性能
http2
- 解决体积问题:
- 使用binary传输数据(哈夫曼编码)
- 使用HPack压缩格式,压缩请求和响应标头元数据
- 连接中维护headers的静态表和动态表,缺省的标头字段使用静态表的值(因此,可以说http2是有状态的协议)
- 解决队头阻塞
- 分帧的多路复用(二进制是分帧的前提,分帧是多路复用的前提,http2的多路复用并非时分或频分复用,服务端组装请求时通根据每一帧的前9个字节进行组装,详细原理见这盘文章:https://segmentfault.com/a/1190000016975064)
- push
- 服务端可以主动推送静态资源给客户端,前置下载流程,客户端缓存静态资源,当解析到该资源时,直接读缓存而非单独发送请求
http3
- TCP协议的队头阻塞
- 使用基于UDP协议的QUIC协议和TLS1.3协议,RTT从6降低到1,解决TCP队头阻塞问题,进一步优化性能