HTTP/2 VS HTTP/3
HTTP/2的背景
- HTTP HOL(head of line) 阻塞问题
- 未实现多路请求复用的请求流水线
- 开启多个TCP连接请求多个资源
- 数据传输的文本性质
- 长HTTP标头
- 克服上述问题引进的解决方案(如域分片,Spriting(sprite maps)等)带来的兼容性和互操作问题
- 网页加载速度慢
对HTTP/3的诉求
多路复用、负载峰值和请求优先级
服务器推送变得复杂
TCP对头阻塞
HTTP/2 和 HTTP/3的不同
HTTP/2 概述
- 创建交错通信流的二进制框架层。
- 完全多路复用而不是强制排序并因此阻塞(这意味着它可以使用一个连接进行并行处理)。
- 标头压缩以减少开销。
- 从服务器主动“推送”响应到客户端缓存。
HTTP/2:优缺点
优点
- 所有浏览器都支持 HTTPS 上的 HTTP/2 协议并安装了 SSL 证书。
- HTTP/2 允许客户端通过单个 TCP 连接同时发送所有请求。从理论上讲,客户端应该更快地接收资源。
- TCP 是一种可靠、稳定的连接协议。
缺点
- 并发请求会增加服务器的负载。HTTP/2 服务器可以接收大批量的请求,这会导致请求超时。服务器负载激增的问题可以通过插入负载均衡器或代理服务器来解决,这可以限制请求。
- 服务器对 HTTP/2 优先级的支持还不成熟。软件支持仍在不断发展。某些 CDN 或负载平衡器可能无法正确支持优先级排序。
- HTTP/2 推送功能可能很难正确实现。
- HTTP/2 解决了 HTTP 队头阻塞问题,但 TCP 级阻塞仍然会导致问题。
HTTP/2 适用于哪些用例?
- 对于响应时间不重要的应用程序。
- 仅在使用合适的自适应技术(例如WebSockets、服务器发送事件 (SSE)、发布-订阅 (pub/sub)消息传递)的情况下,才能使用时间关键型应用程序,例如实时消息传递或流式应用程序。
- 需要可靠连接的地方(TCP 的强度)
- 使用受限的 IoT 设备
HTTP/3 概述
HTTP/3:优缺点
优点
- 在 UDP 上运行的新(不同的)传输协议 QUIC 的引入意味着在理论上和目前在实验上都减少了延迟。
- 由于 UDP 不在协议栈中执行错误检查和纠正,因此适用于不需要或在应用程序中执行这些的用例。这意味着 UDP 避免了任何相关的开销。UDP 通常用于时间敏感的应用程序,例如实时系统,它不能等待数据包重新传输,因此可以容忍一些丢弃的数据包
缺点
- 传输层分支。过渡到 HTTP/3 不仅涉及应用层的变化,还涉及底层传输层的变化。因此,与其前身相比,采用 HTTP/3 更具挑战性。
- 可靠性问题。UDP 应用程序往往缺乏可靠性,它必须接受一定程度的数据包丢失、重新排序、错误或重复。由最终用户应用程序提供任何必要的握手,例如已收到消息的实时确认。
HTTP/3 适用于哪些用例?
- 在线游戏、广告投标和 IP 语音等实时应用程序,以及使用实时流协议的地方。
- 多种服务发现中的广播信息和精确时间协议、路由信息协议等共享信息。这是因为 UDP 支持多播。
- 物联网。HTTP/3 可以解决物联网用例的无线连接有损问题,例如从附加传感器收集数据的移动设备。
- 大数据。随着 HTTP/3 变得足够强大,托管的 API 服务将能够被流式传输,然后随着数据转化为商业智能而货币化。
- 基于网络的虚拟现实。VR 应用程序需要更多带宽来呈现虚拟场景的复杂细节,并且肯定会从迁移到由 QUIC 支持的 HTTP/3 中受益。
- 微服务:更快(或没有)握手意味着更快地遍历微服务网格。
编程语言对HTTP/2和HTTP/3的支持
.NET 中对HTTP/2和HTTP/3的支持
Golang对HTTP/2 和 HTTP/3的支持
- 从Go 1.6开始,当时使用HTTPS时,net/http package 开始支持HTTP/2
- 对于HTTP/3的支持,仅限Go 1.18.x 和1.19.x,目前没有发布1.0版本的quic-go/http3版本,并且关于net/http:suuport HTTP/3的issues还未关闭
一些包含HTTP/3客户端和服务端实现方案的开源库
Server 对HTTP/3的支持
- 2021 6月7日,LiteSpeed Web Server(和OpenLiteSpee)6.0.2发布,成为第一个默认启用HTTP/3的版本。
- Caddy web服务器v2.6.0(2022年9月20日发布)默认启用HTTP/3。
- Nginx对HTTP/3的支持正在研究中。2020年6月发布了支持HTTP/3的Nginx技术预览。
- Cloudflare为nginx发布了一个补丁,将quiche HTTP/3库集成到其中。
- Microsoft IIS对HTTP/3的支持是通过Windows Server 2022/Windows 11本地启用的。
- 自2022年5月31日发布2.6版以来,HAProxy支持基于QUIC的HTTP/3。
浏览器对HTTP/2 HTTP/3的支持
HTTP/3的实际应用
实施HTTP/2/3的挑战
HTTP/3是不是会替换HTTP/2?
随机推荐
- Blazor Server完美实现Cookie Authorization and Authentication
Blazor server-side application用Microsoft.AspNetCore.Identity.EntityFrameworkCore实现Authorization 和 Au ...
- Idea中Git的常用操作及可能存在的问题
一.使用 1.从git上下载项目 (1)默认branch下载(pull) (2)指定branch下载 (3)克隆远程仓库到本地(git clone) git clone https://github. ...
- [数学建模]主成分分析法PCA
最常用的线性降维方法,通过某种线性投影,将高维的数据映射到低维的空间中,并期望在所投影的维度上数据的信息量最大(方差最大),以此使用较少的数据维度,同时保留住较多的原数据点的特性. Q1:为何选取方差 ...
- ATM购物车项目总结
目录 项目实现思路 ATM项目 优先实现功能 拆分函数 项目路径展示 项目启动文件 start.py 配置文件 setting.py 日志配置字典 日志函数 展示层 src.py 用户注册 获取用户输 ...
- 《HTTP权威指南》– 10.安全HTTP
HTTPS的概念 HTTPS 是最流行的HTTP安全模式,由网景公司首创,所有主流浏览器和服务器都支持此协议.HTTPS方案 的URL以 https:// 开头,使用 HTTPS 时,所有的HTTP请 ...
- Prometheus高可用架构介绍
Prometheus作为新生代的开源监控系统,慢慢成为了云原生体系的监控事实标准,也证明了其设计得到业界认可.但在多集群,大集群等场景下,Prometheus由于没有分片能力和多集群支持,还有Prom ...
- [数据结构]单向链表及其基本操作(C语言)
单向链表 什么是单向链表 链表是一种物理储存单元上非连续.非顺序的储存结构.它由一系列结点(链表中每一个元素称为结点)组成,结点可动态生成.每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存 ...
- [机器学习] PCA主成分分析原理分析和Matlab实现方法
转载于http://blog.csdn.net/guyuealian/article/details/68487833 网上关于PCA(主成分分析)原理和分析的博客很多,本博客并不打算长篇大论推论PC ...
- APIO2022 游记
Day 0 有人刚登记完房间就把房卡落在房间里了我不说是谁(真不是我,不信去问jth) 下午把gen把模拟赛的题补了一下,T3是个不太可做的虚树上淀粉质dp,先咕着. Day 1 上午来的比较晚,没有 ...
- SOFAJRaft源码阅读-ShutdownHook如何优雅的停机
Java程序经常会遇到进程挂掉的情况,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码.JAVA中的ShutdownHook提供了比较好的方案.而在SOFAJRaft- ...