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?
随机推荐
- 笑死,面试官又问我SpringBoot自动配置原理
面试官:好久没见,甚是想念.今天来聊聊SpringBoot的自动配置吧? 候选者:嗯,SpringBoot的自动配置我觉得是SpringBoot很重要的"特性"了.众所周知,Spr ...
- [深度学习] Pytorch模型转换为onnx模型笔记
本文主要介绍将pytorch模型准确导出为可用的onnx模型.以方便OpenCV Dnn,NCNN,MNN,TensorRT等框架调用.所有代码见:Python-Study-Notes 文章目录 1 ...
- [R语言] ggplot2入门笔记2—通用教程ggplot2简介
文章目录 通用教程简介(Introduction To ggplot2) 2 ggplot2入门笔记2-通用教程ggplot2简介 1. 了解ggplot语法(Understanding the gg ...
- 关于Token和Cookie做权限校验的区别及Token自动续期方案
title: 关于Token和Cookie做权限校验的区别及Token自动续期方案 categories: 后端 tags: - .NET Token和Cookie的区别 首先,要知道一些基本概念:h ...
- 【架构设计】你真的理解软件设计中的SOLID原则吗?
前言 在软件架构设计领域,有一个大名鼎鼎的设计原则--SOLID原则,它是由由Robert C. Martin(也称为 Uncle Bob)提出的,指导我们写出可维护.可以测试.高扩展.高内聚.低耦合 ...
- csrf跨站请求伪造、csrf校验策略、csrf相关装饰器、auth认证模块、auth认证相关模块及操作、扩展auth_user表
今日内容 csrf跨站请求伪造 钓鱼网站:模仿一个正规的网站 让用户在该网站上做操作 但是操作的结果会影响到用户正常的网站账户,但是其中有一些猫腻 eg:英语四六级考试需要网上先缴费,但是你会发现卡里 ...
- 在Ubuntu上安装OpenShift并使用
服务器信息 在阿里云买了个抢占式的服务器,地区为华南广州,系统为Ubuntu 20.04,8核16GB. 安装Docker 命令如下: $ apt-get update -y $ apt-get up ...
- 双目测距+点云——使用MiddleBurry数据集的图片
效果 输入: 左图 右图 输出: 视差图 深度图 实现了鼠标点击图片中的位置,显示其深度. 点云 其他例子点云: bicycle motorcycle 使用自己的双目摄像头拍摄的图片: bottle ...
- echarts系列-带图教你调整左右位置x轴样式网格虚线刻度居中双轴Y轴滚动上下移动文字旋转改分割线颜色部分字体改色折注混合,X轴的颜色,X轴字体颜色,调整柱子颜色,调整小图标图例的大小和位置,鼠标hover时候的样式,用纵向阴影
上面先说注意事项 1.如果使用show hidden控制图表显示隐藏,某些切换效果很奇怪,比如饼图,会从左上角开始放大,很丑,这个时候我们可以设置其宽高来解决问题,给其设置宽高后,切换的奇怪效果即可消 ...
- RealWorld CTF 5th ShellFind 分析
前言 RealWorld CTF 5th 里的一道iot-pwn,根据真实设备固件改编而成,觉得题目贴近iot实战且很有意思,故在此记录一下复现过程. 题目分析 题目描述 Hello Hacker. ...