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?
随机推荐
- 编译器优化丨Cache优化
摘要:本文重点介绍几种通过优化Cache使用提高程序性能的方法. 本文分享自华为云社区<编译器优化那些事儿(7):Cache优化>,作者:毕昇小助手. 引言 软件开发人员往往期望计算机硬件 ...
- 【SQL进阶】【表默认值、自增、修改表列名、列顺序】Day02:表与索引操作
一.表的创建.修改与删除 1.创建一张新表 [设置日期默认值.设置id自增] [注意有备注添加备注COMMENT] CREATE TABLE user_info_vip( id int(11) pri ...
- ATM购物车
ATM项目实现思路: ATM架构设计 三层架构 core目录下的src.py(浏览器) (展示层) interface目录下的多个py文件(框架) (核心逻辑层) db目录下db_handler.py ...
- 数据库MySQL(完结)
SQL注入问题 简介 针对SQL注入的攻击行为可描述为通过用户可控参数中注入SQL语法,破坏原有SQL结构,达到编写程序意料之外结果的攻击行为. 其成因可归结为以下两个原理叠加造成: 程序编写者在处理 ...
- [Linux Kernel 源码分析] 通过vconfig配置vlan的系统调用/驱动流程分析
By YuCloud (蓝天上的云℡ - 博客园 https://www.cnblogs.com/yucloud/) 转载请注明出处 vconfig源码分析 vlan/vconfig.c at mas ...
- 工业数据分析为什么要用FusionInsight MRS IoTDB?
摘要:MRS IoTDB,它是华为FusionInsight MRS大数据套件中的时序数据库产品,在深度参与Apache IoTDB社区开源版的基础上推出的高性能企业级时序数据库产品. 本文分享自华为 ...
- github的初体验
首先你得注册一个自己的GitHub账号,注册网址:https://github.com/join有了自己的账号以后,就可以进行登录,开始创建一个新的项目创建一个新的项目,填写项目名称,描述创建完成之后 ...
- Hadoop详解(02)Hadoop集群运行环境搭建
Hadoop详解(02)Hadoop集群运行环境搭建 虚拟机环境准备 虚拟机节点数:3台 操作系统版本:CentOS-7.6-x86-1810 虚拟机 内存4G,硬盘99G IP地址分配 192.16 ...
- 2022USACO-DEC-Silver
题目链接 T1.Barn Tree T2.Circular Barn T3.Range Reconstruction T1 下面均以\(1\)为根来进行分析. 算法思路: 首先,定义一个数组dis表示 ...
- [Untiy]贪吃蛇大作战(一)——开始界面
前言: 刚学unity没多久吧(大概1个月多点),这是我自己做的除官网之外的第一个游戏demo,中间存在很多不足的地方,但是还是希望可以给需要的人提供一些思路和帮助,有问题的小伙伴可以找我一起探讨一起 ...