当前位置: 首页 > news >正文

Go开始搞HTTP/3,新提案正式启动!Go性能又要起飞?

人生说到底

就是一次次体验

尤其是体验那种悬而未决的状态

红楼梦很意外的告诉我们

具体的结局没那么重要

由你展开的一字一文

已足够有趣

引言

随着互联网技术的不断演进,HTTP协议也在不断升级。从HTTP/1.1到HTTP/2,再到目前最新的HTTP/3,每一次升级都带来了性能和效率的显著提升。HTTP/3基于QUIC协议,旨在解决HTTP/2在移动网络和高延迟环境下的性能瓶颈。

HTTP/3历史

HTTP/3 的历史本质上是一部 “解决 TCP 缺陷” 和 “QUIC 协议崛起” 的历史。

历史的根源:TCP 的“队头阻塞”问题

要理解 HTTP/3 为什么出现,必须首先理解其前任协议的核心缺陷。

HTTP/1.1 (1997): 基于 TCP。经典问题是无序的请求/响应队列,导致“队头阻塞”(Head-of-Line Blocking, HOLB)——如果队列中的第一个请求被延迟,后面的所有请求都会被卡住。解决方法是通过多个 TCP 连接,但效率低下。

HTTP/2 (2015): 一个重大进步。它引入了“多路复用”(Multiplexing)——在一个 TCP 连接上并行发送多个请求/响应流,解决了应用层的队头阻塞。

但有一个致命伤:HTTP/2 的流运行在同一个 TCP 连接上。而 TCP 协议本身是按顺序传输数据包的。如果任何一个TCP 包丢失,整个连接都必须停下来等待这个丢失的包被重传和确认。即使其他流的数据包已经到达,也会被这个丢失的包阻塞。这被称为 TCP 层的队头阻塞。

简单比喻就是:

HTTP/1.1:多条单行道(多个TCP连接),每条路上有一列车队(请求队列),头车坏了整条路瘫痪。

HTTP/2:一条宽阔的高速公路(一个TCP连接),上面有多条车道(多个流)。但高速公路只有一个出口,任何一辆车(TCP包)发生事故,所有车道都要停下等待,整个交通陷入停滞。

HTTP/2也是比较符合现在的道路规则。

关键的创新:QUIC 协议的诞生

Google 的工程师们意识到,要彻底解决这个问题,必须在传输层进行革命。于是在 2012 年,Google 公开了一个实验性项目:QUIC (Quick UDP Internet Connections)。

QUIC 的核心思想是:在用户空间的 UDP 之上,重新实现一个类似 TCP+TLS+HTTP/2 功能的可靠、安全、多路复用的传输协议。2021年5月:IETF 发布了 QUIC 和 HTTP/3 的最终标准,在随后的五年里,随着 Chrome、Firefox 等主流浏览器以及 Cloudflare 等基础设施提供商纷纷拥抱 HTTP/3,社区的期待也日益高涨。

而在go里面net/http一直是go里面引以为傲的一个http库。但是现在的http3已经趋于成熟,所以Go团队决定入局http3。

但是Go团队在面对每个大决定的时候,都是很谨慎的,不仅要考虑协议的稳定性,还要考虑实现的复杂度。

图片

考虑到目前协议已经稳定,Go团队面对巨大的实现难度,决定分2步来走:先 QUIC,后 HTTP/3

第一步:构建 QUIC 基础 (x/net/quic)

Go 团队的核心成员 neild 最近宣布,该 QUIC 实现已从内部包 (internal/quic) 移至公开的 x/net/quic**,虽然仍处于实验阶段且 API 可能变化,但这标志着它已足够成熟,可以供社区“尝鲜”和提供反馈。

第二步:实现 HTTP/3 (x/net/http3)

和quic一样,它将首先在内部包 (x/net/internal/http3) 中进行开发,待 API 稳定后再移至公开包,并提交最终的 API 审查提案。

Go网络编程的下一步形态

go对http3的支持,进一步丰富了net/http库,让Go在网络编程在性能上得到进一步的提升,为所有 Go 开发者带来更快、更可靠的网络体验。

从另一个方面考虑,虽然Go 的核心优势之一是“开箱即用”的高性能,但是Go也是一门不年轻的编程语言了,相对于最近依赖的新型语言比如zig,moonbit等语言,Go想要保持自己的高性能的优势也不得不继续努力。

想象一下:Go http3的代码例子

package mainimport
("net/http""x/net/http3")func main
(
)
 {    mux :
=
 http
.
NewServeMux
(
)    mux
.
HandleFunc
(
"/"
,
 func
(
w http
.
ResponseWriter
,
 r 
*
http
.
Request
)
 {        w
.
Write
(
[
]
byte
(
"Hello HTTP/3!"
)
)    }
)// 估计会跟现有的 http 包整合得很好    server :
=
&
http3
.
Server{        Addr:    
":8080"
,Handler
: mux
,    }    server
.
ListenAndServe
(
)}

总结

从Go开始搞http3,可以看出Go团队对网络编程的性能的不写奴鲁和追求,同时也会打破想要只要http3只能引入第三方库的尴尬局面,但是话也说回来,连Go团队本尊都承认这个的实现及其复杂,想要达到稳定可用,还需要不少的时间沉淀。

http://www.jsqmd.com/news/613465/

相关文章:

  • 【IEEE出版 | EI检索】 第十二届传感云和边缘计算系统国际会议 (SCECS 2026)
  • 深度解析猫抓插件:如何解决浏览器资源嗅探的三大核心技术挑战
  • 世界第一个开源可商用 .NET Office 转 PDF 工具/库 - MiniPdf盐
  • Axure中文语言包终极指南:3分钟让Axure RP秒变中文界面
  • Public Suffix List性能优化指南:处理16000+条域名记录的技巧
  • 3步掌握FanControl:Windows平台最专业的免费风扇控制方案
  • 2026年重庆乡野灵芝茶公司推荐:重庆市乡野农业科技有限公司——本草灵芝茶/山野灵芝茶/养生灵芝茶公司 - 品牌推荐官
  • Symfony Translation Contracts源码分析:深入理解PHP翻译算法的实现原理
  • AI专著撰写全流程:工具实操教程,新手也能快速上手出专著
  • OpenClaw个人健康助手:千问3.5-35B-A3B-FP8分析运动截图生成周报
  • 国际权威经济学期刊分类指南(涵盖经济学、统计学与金融计量领域)
  • OpCore-Simplify:颠覆传统黑苹果配置流程的EFI生成工具
  • 2026年液压隔膜计量泵怎么选?从选型到验收,一篇搞定(附厂家推荐) - 品牌推荐大师1
  • 100面值微信立减金回收多少,新手回收不吃亏的三种方法 - 淘淘收小程序
  • AI专著撰写技巧大公开!优质工具助力,让写作过程不再痛苦
  • 59.Acwing基础课第870题-简单-约数个数
  • 3步打造跨设备控制中心:无缝切换多系统的高效工作流
  • 服务器部署应用全流程指南
  • 轴向柱塞泵设计(论文+DWG图纸)
  • 深入理解Autofac:探索.NET IoC容器的核心设计与工作原理
  • 5分钟掌握Source Code Pro:让代码阅读体验焕然一新的编程字体
  • RimSort模组管理进阶指南:从冲突诊断到性能优化的系统化方案
  • PHP支付密钥管理危机:硬编码、环境变量泄露、KMS集成失败——4种企业级密钥分发方案对比实测
  • Chrono车辆模块实战教程:从概念到完整车辆仿真的完整指南
  • 终极指南:如何用MedSAM实现3D医学图像分割与器官重建
  • 2026年4月最新朗格官方售后服务中心网点考察报告(新址) - 速递信息
  • 如何快速上手Notepad--:跨平台文本编辑器的终极指南
  • OpCore Simplify:如何用10分钟图形化工具轻松搞定黑苹果EFI配置?
  • C语言指针精讲:从内存寻址到实战避坑指南
  • 【Vue3】我用 Vue 封装了个 ECharts Hooks