HTTP1/2/3演变

http的演变过程为1.0 → 1.1 → 2.0 → 3.0。每个版本其实都是为了解决上一个版本的缺陷,在不断的改进和完善。

从http1.0到http1.1

Http1.0

最大的问题,非长连接!(Connection: close)

Http1.1

支持长连接。(Connection: keep-alive)

为什么需要长连接?

省去三次握手和四次挥手!

有了长连接,很自然的,我可以一次连接同时发送多个http请求,即管线化技术。

综上:http1.1比http1.0最重大的改进就是支持了长连接和管线化。

从http1.1到http2.0

解决管线化的缺点:http队头阻塞 (响应的时候必须按照发送的顺序接收,上图的1收不到会阻塞2和3)。(方法:报文拆分成帧,添加流标识符

引入HPACK算法压缩头部

支持服务器推送数据

从http2.0到http3.0

从tcp下手了,tcp和操作系统绑定,不好优化,所以使用udp+quic完成,可以说是tcp2.0。

解决了tcp队头阻塞 。以上管线化的示例图中,在http2.0中,http请求123不会阻塞了,但是单个请求内部的tcp序列还是存在队头阻塞的。即请求1内的1.1,1.2,1.3还是要按顺序接收的。(方法,QUIC帧,加流标识符)

整合了tcp三次握手和TLS,使连接更快。

TLS1.3版本更新,更加安全。

网络连接状态变化时,无需重连(不依赖ip地址,加了连接ID)。

传输层与连接机制

版本 传输层协议 连接管理 并发能力
‌HTTP/1.1‌ TCP 持久连接(Keep-Alive),单连接串行请求 同一域名最多6~8个TCP连接并行,资源分片缓解阻塞
‌HTTP/2‌ TCP 单TCP连接上多路复用(Multiplexing) 多个请求/响应帧交错传输,无序交付,‌解决HTTP层队头阻塞‌
‌HTTP/3‌ ‌QUIC(基于UDP)‌ 连接建立融合TLS 1.3,0-RTT/1-RTT快速握手 ‌流级独立拥塞控制与重传‌,单流丢包不影响其他流

核心性能优化机制

机制 HTTP/1.1 HTTP/2 HTTP/3
‌头部压缩‌ HPACK(差分编码,压缩率50%~90%) QPACK(基于HPACK,支持动态表同步)
‌队头阻塞‌ ‌严重‌:请求必须按序响应 ‌部分解决‌:仅消除HTTP层阻塞,TCP层丢包仍阻塞所有流 ‌彻底解决‌:每个流独立,丢包仅影响本流
‌服务器推送‌ 不支持 支持(可被客户端禁用) 支持(通过QPACK流实现)
‌加密‌ 可选(HTTPS为扩展) 通常强制使用TLS ‌强制使用TLS 1.3‌,加密内建于QUIC
相关推荐
妙码生花19 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(八):设计管理员模型、热重载配置
前端·后端·go
政采云技术19 小时前
Chrome 高阶调试技巧
前端
牧艺19 小时前
HTML-in-Canvas 深度解析:让 Canvas 真正「吃上」HTML 这碗饭
前端·html·canvas
秦瑜华19 小时前
前端页面添加AI自动翻译按钮
前端·openai·ai编程
沉浸学习的匿名网友19 小时前
什么是 .gitignore?为什么每个 Git 项目几乎都离不开它?
前端·git
Apifox20 小时前
从 Postman 迁移到 Apifox:Workspace、Collection、Environment 现在可以一起导入了
前端·后端·程序员
cidy_9821 小时前
Agent\-Reach 保姆级教程|AI Agent 全网数据源扩展工具(免费无调用费)
前端
乘风gg21 小时前
当 AI 遇到私有组件,Cli 才是 AI Coding 的起点
前端·ai编程·cursor
40岁搬砖工21 小时前
直观高效的 VSCode 略缩图定位注释 MARK
前端
前端开发爱好者1 天前
支持 110 种文件预览!兼容 Vue、React、Svelte!
前端·javascript·vue.js