python 3.10 项目升级 starlette 时碰到了明确的新版本限制:2026 年 10 月 13 日发布的 1.8.0,把最低运行环境要求上调到 python 3.11。同一版本还新增 http 103 early hints 功能,允许端点在最终响应就绪前发送资源提示,相关能力通过 asgi 扩展实现。

来源:Starlette 官方 GitHub
新增的 Request.send_early_hints() 方法,用来提前发送一个或多个 Link 头值。按官方文档说明,端点处理后续任务的同时,客户端可先行加载样式表、脚本等资源。这只是最终响应发出前的提示,不会直接把资源文件作为最终页面返回,也不会中断正常的响应生成流程。
这项功能能否生效,取决于实际服务链路。如果 ASGI 服务器不支持对应的早期提示扩展,该方法不会执行操作。浏览器也可能忽略这类提示,最终响应仍需引用所需资源。框架提供接口、终端收到提示,属于两个独立条件。

立即学习“Python免费学习笔记(深入)”;
Starlette 1.5.1 是轻量级 Python ASGI 框架与工具集,提供路由、请求响应、中间件、WebSocket 和后台任务等组件,适合构建异步 Web 服务。本下载为官方 PyPI 通用 wheel 包,可使用 pip 安装,并由包管理器处理依赖;运行应用时还需配置 ASGI 服务器。
来源:Starlette 官方文档
1.8.0 版本同时调整了压缩中间件。原生 gRPC 媒体类型默认不参与 GZip 压缩,响应尾部字段经过这层中间件时会保留。已经设置 Content-Encoding、状态为 206,或是类型属于排除范围的响应,中间件会直接发送响应起始消息,不再等待第一个正文块。
文件传输也做了几处针对性修复。客户端断开连接后,FileResponse 会终止传输;多范围响应场景下,如果文件在某个分片传输完成前就已结束,处理流程会直接停止,不会进入死循环。If-Range 携带弱 ETag 时会忽略 Range 字段,避免按不匹配条件处理局部内容。
会话与请求资源的收尾行为变更也记录在更新日志中:Session.pop() 移除已有键时会自动加入 Vary: Cookie,max_age=0 时发出的会话 Cookie 包含 Max-Age=0。叠加 BaseHTTPMiddleware 场景下,Request.stream() 生成器的关闭逻辑也得到修正,覆盖此前可能出现的异常忽略提示。
官方 1.8.0 发布记录明确标注了运行时与传输相关变动,早期提示文档补充说明了服务器和浏览器侧的限制。仍在使用 Python 3.10 的服务,升级运行环境是使用该版本的前提;已满足环境要求的服务,HTTP 103 能否实际送达客户端仍需对应服务器支持,不能仅靠升级依赖就判定功能生效。

















