Uvicorn 默认使用 HTTP/1.1 协议,通过 --http auto(等价于 httptools)实现,不支持 HTTP/2,HTTP/3 需显式安装 uvicorn[http3] 并配置 SSL 与 UDP 端口。

Uvicorn 默认用什么 HTTP 协议?
Uvicorn 默认只支持 HTTP/1.1,不启用 HTTP/2 或 HTTP/3。它不会自动协商协议版本,也不会降级或升级;你指定什么,它就跑什么——没指定,就走最稳的 HTTP/1.1。
这个行为不是 bug,是设计:Uvicorn 把协议选择权交给用户,避免隐式行为导致线上环境不可控。比如,某些反向代理(如旧版 Nginx)不兼容 HTTP/2 ALPN 协商,若默认开启,反而会导致 421 错误或连接重置。
-
--http h11和--http httptools都只处理HTTP/1.1请求,不涉及协议升级逻辑 -
--http auto(默认值)实际等价于httptools,仍是HTTP/1.1专属 - 即使你传了
--ssl-keyfile和--ssl-certfile,Uvicorn 也不会自动启用HTTP/2—— TLS 存在 ≠HTTP/2启用
怎么启用 HTTP/2?Uvicorn 本身不支持
截至 2026 年 10 月,uvicorn 官方主线版本(包括 0.27.x 及之前所有稳定版)**不支持 HTTP/2**。它的协议层没有实现 HPACK 头压缩、二进制帧解析、流优先级或服务器推送等核心能力。
如果你看到文档或博客里写 “Uvicorn 支持 HTTP/2”,大概率是混淆了以下两种情况:
- 把
FastAPI的HTTP/2响应头(如content-type中带application/grpc+proto)误认为协议升级成功 - 把前端通过 Nginx / Cloudflare 等反向代理启用了
HTTP/2,误归功于 Uvicorn - 用了非官方 fork 或实验性分支(如早期社区 patch),但这些未被合并,也不保证稳定性
真要跑 HTTP/2,得换服务器:hypercorn(推荐)、daphne 或 gunicorn + gevent(仅限部分场景)。
HTTP/3 怎么开?必须满足四个硬条件
启用 HTTP/3 不是加个 flag 就行。Uvicorn 从 0.24.0 起通过 uvicorn[http3] 扩展提供 QUIC 支持,但依赖链极长,缺一不可:
Uvicorn 0.52.1 是 Python ASGI Web 服务器,提供异步应用服务及 WebSocket 支持,常用于 FastAPI、Starlette 等应用的开发和部署。本下载为官方 PyPI 通用 wheel 包,可使用 pip 安装,并由包管理器处理所需依赖。
- Python ≥ 3.8(
asyncioUDP socket 支持需此版本基线) - OpenSSL ≥ 3.0(QUIC 依赖 TLS 1.3 的
draft-29及以上扩展) - 安装时明确指定
pip install uvicorn[http3]([standard]不含 QUIC) - 启动命令中同时出现:
--http http3+--ssl-keyfile+--ssl-certfile+ UDP 端口可通(通常为--port 443,且防火墙放行 UDP 443)
常见失败现象:OSError: [Errno 97] Address family not supported by protocol(系统内核不支持 UDP socket 或 OpenSSL 编译时禁用了 QUIC);或浏览器显示“ERR_HTTP2_INADEQUATE_TRANSPORT_SECURITY”(证书不满足 TLS 1.3 要求)。
为什么不能同时监听 HTTP/1.1 和 HTTP/3?
Uvicorn 不支持单进程多协议监听。它不像 hypercorn 那样能在一个端口上通过 ALPN 协商自动分发:TLS 握手时客户端声明支持 h3,服务端回 h3;声明 http/1.1,就走传统流程。
Uvicorn 的 --http 参数是全局开关,只能选一种协议栈:
-
--http http3→ 只响应 QUIC 连接(UDP),拒绝所有 TCP 连接(包括HTTP/1.1和HTTPS) -
--http httptools→ 只响应 TCP 连接,忽略所有 QUIC 流量 - 想共存?必须起两个进程:一个绑 TCP:443(
HTTP/1.1或HTTP/2via proxy),一个绑 UDP:443(HTTP/3)
这个限制源于其架构:协议解析器和传输层绑定太紧,QUIC 的连接管理(如连接迁移、0-RTT 恢复)和 TCP 的完全不兼容,无法共享同一事件循环实例。










