uvicorn 0.54.0这次更新,给实验性http/2通路新增了两项asgi响应能力:http trailers 和 103 early hints。现在应用可以通过asgi扩展事件传递响应尾部字段或者提前提示内容,uvicorn会直接把这些信息同步到http/2响应里。对那些需要流式返回元信息、或是要提前通知客户端预加载资源的服务来说,这下服务器接口能更贴合http协议的原生能力。

来源:Uvicorn 官方更新记录
Trailers 会放在响应主体的末尾,适合放置那些得等正文全部生成完才能确定的字段,发送时机和普通响应头完全不同。官方说明特意强调,客户端必须先在请求里带上 TE: trailers 头,才表示自己支持接收trailers。服务端应用和客户端都要遵守这个协商规则,不能把尾部字段当成所有请求都能收到的普通响应头来用。
Early Hints 对应的就是HTTP 103状态码,可以在最终响应完全生成之前先发出资源提示,最常用的场景是让客户端提前发起后续资源的预加载请求。它不会替代最终的状态码和完整响应内容,也不保证浏览器一定会完全按照提示执行操作。服务端得通过对应的ASGI事件主动触发它,而且反向代理、负载均衡器能不能正常转发103状态码,客户端能不能正确识别处理,都要在实际部署链路里实测确认。

来源:Uvicorn 官方更新记录
这里要特别注意:目前Uvicorn的HTTP/2还是实验性功能,正式上线使用前,先确认你启动服务的命令里已经开启了对应HTTP实现的开关,本地环境也装全了所有需要的依赖。
之后还要验证代理层、TLS终止环节的配置,以及客户端的协议协商逻辑。既然标注了实验状态,后续的功能行为和配置规则都有可能调整,别光看版本更新说明就直接把HTTP/2设成生产环境的默认通路。
这次更新只是新增了可选的功能扩展,不会让所有ASGI应用自动开始发送trailers或者Early Hints,得应用代码里主动显式触发对应事件才行,同时客户端也要满足对应的协议前提。建议团队搭建端到端测试,分别覆盖不带TE: trailers头、带该请求头,还有代理介入的几种场景,检查不同情况下的响应表现,同时还要验证回退到HTTP/1.1的时候,业务逻辑能不能完全正常运行。










