Go HTTP/3 的推进,可以说是 "起了个大早,赶了个晚集"。2019 年就有人提议,2025 年提案又被搁置,这个过程确实有点魔幻。但换个角度想,这也是 Go 一贯的风格:稳字当头,又或是 ”less is more“。至于什么时候能在标准库中用上 HTTP/3,就看 Go 核心团队的魄力和资源分配了。
2024 年,Go 核心团队成员 @neild 提交了一个新提案 #70914[1],打算在 x/net/http3 中添加 HTTP/3 的实验性实现。

图片
本以为这次也算是正式启动了。能有些苗头。结果万万没想到,这个提案能又被半路搁置了!

图片
要知道,这已经不是 Go HTTP/3 第一次 "跳票" 了。
背景:多年的苦等
说起来挺无奈的,Go 社区对 HTTP/3 的呼声由来已久。早在 2019 年 5 月,社区就开了 Issue #32204[2] 来追踪 HTTP/3 在标准库中的实现进度。那时候 HTTP/3 还只是 IETF 的草案,大家也能理解官方的谨慎态度。

图片
但是现在都 2025 年了!HTTP/3 早在 2022 年 6 月就被 IETF 正式发布为提议标准(RFC 9114)了,主流浏览器的支持率已经超过 95%,全球前 1000 万网站中也有 34%支持了 HTTP/3。

图片
简单来说,HTTP/3 已经不是什么"新鲜玩意儿"了,它是实打实的生产级协议。可 Go 官方在标准库层面,依然没有动静。
提案内容:看似稳妥的方案
我们来看看 @neild 这次提出的方案到底是什么。
这个提案的思路其实挺保守的,和之前被接受的 QUIC 提案 #58547[3] 基本一致:
- 先在 x/net/internal/http3 中实验性开发
- 等 API 稳定后,再移到 x/net/http3 供外部测试
- 最后提交正式的 API 审查提案
这个策略看起来很稳妥对吧?先内部折腾,等成熟了再放出来。照理说应该问题不大。
但是很无奈的是,就是这么个稳妥的方案,也被搁置了!也是绝了。
社区讨论:无奈与不解
在 Issue #32204 的讨论中,我们能看到社区对这个问题的长期关注。
主要包含以下几种态度/想法:
1、时间线: 2020 年,Brad Fitzpatrick 就在评论中提到过,Go 团队在观望 HTTP/3 的成熟度。现在 5 年过去了,HTTP/3 早就从草案变成了正式标准,主流语言和框架也都有了成熟实现。
2、生态问题: 目前想在 Go 中使用 HTTP/3,只能依赖第三方库 quic-go[4]。这个库做得确实不错,实现了完整的 QUIC 和 HTTP/3 支持:
复制
package main
import (
"github.com/quic-go/quic-go/http3"
"log"
"net/http"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello, HTTP/3!"))
})
// 启动 HTTP/3 服务器
log.Fatal(http3.ListenAndServeQUIC(
"0.0.0.0:8443",
"/path/to/cert.pem",
"/path/to/key.pem",
mux,
))
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
但问题在于:
- 第三方库的维护周期和 Go 官方不一致
- 没有标准库的背书,企业级项目用起来总是有顾虑
- API 设计上无法和 net/http 无缝集成
3、多语言对比:隔壁 Rust、C++、Java、C# 等语言,人家早就把 HTTP/3 支持做进标准库或官方库了。Go 作为云原生时代的代表语言,在网络协议支持上反而显得保守,这确实让人有点心里不平衡。
为什么又又被搁置?
那问题来了,为什么一个看起来如此合理的提案,会被搁置呢?
根据 Go 团队的处理风格,我推测可能有这么几个原因:
1. API 设计的复杂性
HTTP/3 基于 QUIC 协议,和传统的 TCP 有本质区别。要让它和现有的 net/http 优雅地集成,不是简单加几个接口就能搞定的。
举个例子,HTTP/3 的连接是基于 UDP 的,这意味着:
- TLS 握手方式不同(使用 QUIC 的 TLS 1.3)
- 连接迁移特性需要特殊处理
- 流控机制完全不同
这些都需要在 API 设计上仔细考虑。
2. 向后兼容的压力
Go 一直以向后兼容闻名,这是好事,但也带来了设计上的约束。HTTP/3 的 API 怎么设计,既要考虑现有 net/http 用户的习惯,又要支持 HTTP/3 的新特性,这是个难题。
看看在 Go1.24 加入的 HTTP 版本选择 API te'xing #67814[5] 就知道了:
复制
type Protocol uint64
const (
HTTP1 Protocol = (1 << iota)
HTTP2
// HTTP3 还没有...
)
// Server 可以选择支持的协议
s := &http.Server{}
s.Protocols = HTTP1 | HTTP2
// Transport 也可以选择
tr := &http.Transport{}
tr.Protocols = HTTP1 | HTTP2
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
这个 API 预留了扩展空间,但 HTTP3 的位置还是空着的。为什么?因为官方还没想好怎么搞!
3. 资源分配问题
Go 核心团队人手有限,他们现在的重点在:
- 把 x/net/http2 移到标准库 #67810[6]。预计在 Go1.26 版本支持。
- 支持明文 HTTP/2 #67816[7]。这个特性在 Go1.24 版本支持了。
- 完善 HTTP/2 的一系列杂七杂八的问题。
说白了,HTTP/2 都还没彻底搞定,甚至都还没有进入标准库(尴尬了),可能他们认为哪有精力去搞 HTTP/3?
4. 实用主义的考量
有个不得不承认的事实:虽然 HTTP/3 很先进,但在实际生产环境中,HTTP/2 已经够用了。大多数场景下,HTTP/3 带来的性能提升并不是质的飞跃。
所以从实用主义角度看,Go 团队可能觉得 HTTP/3 不是当务之急。资源就没有分配在这里。
总结
Go HTTP/3 的推进,可以说是 "起了个大早,赶了个晚集"。2019 年就有人提议,2025 年提案又被搁置,这个过程确实有点魔幻。
但换个角度想,这也是 Go 一贯的风格:稳字当头,又或是 ”less is more“。至于什么时候能在标准库中用上 HTTP/3,就看 Go 核心团队的魄力和资源分配了。
在那之前,可以先继续使用 quic-go。
参考资料
[1] #70914: https://github.com/golang/go/issues/70914
[2] Issue #32204: https://github.com/golang/go/issues/32204
[3] #58547: https://github.com/golang/go/issues/58547
[4] quic-go: https://github.com/quic-go/quic-go
[5] #67814: https://github.com/golang/go/issues/67814
[6] #67810: https://github.com/golang/go/issues/67810
[7] #67816: https://github.com/golang/go/issues/67816
AI大模型学习福利
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获
四、AI大模型商业化落地方案

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获
作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量
924

被折叠的 条评论
为什么被折叠?



