多字段表单处理开销优化、重复参数比较逻辑调整,是 starlette 1.10.0 的两项核心改动。官方于 2026 年 10 月 24 日发布该版本,改为在解析器回调中直接构建 url 编码字段,修复特定请求流丢失最后一个字段的问题。截至 11 月 2 日,官方仓库已将其标记为最新稳定版。

来源:Starlette 官方 GitHub
此前,FormParser 会先排队记录事件,再重放这些事件,新实现省去了这一中间步骤。官方发布页给出的 CodSpeed 场景中,1000 个字段的处理时间从 42.8 毫秒降至 34.9 毫秒,内存占用从 63.5 KB 降至 54.5 KB。这是指定基准场景的结果,不是任意线上请求的统一加速承诺。
末字段修复针对另一类边界场景:自定义请求流结束时,如果没有再产出一个空字节块,解析器原本可能漏掉最后的字段。1.10.0 在流耗尽时结束解析,保留该字段。它处理的是流结束通知方式,不意味着网络中途丢失的表单内容能够被框架恢复。
多值字典的相等判断发生可见变化。键本身的排列不影响比较,但同一键下面多个值的先后顺序会保留。例如 a=1&a=2 与 a=2&a=1 对应的 QueryParams 不再相等;包含同名多个上传文件的 FormData 也能够比较,不再因此抛出 TypeError。

Starlette 1.5.1 是轻量级 Python ASGI 框架与工具集,提供路由、请求响应、中间件、WebSocket 和后台任务等组件,适合构建异步 Web 服务。本下载为官方 PyPI 通用 wheel 包,可使用 pip 安装,并由包管理器处理依赖;运行应用时还需配置 ASGI 服务器。
来源:Starlette 官方 GitHub
依赖内部解析对象的扩展还要留意弃用项。FormMessage 已不再用于解析流程,调用它会产生弃用警告,FormParser.messages 也被移除。对于直接读取内部事件队列的代码,性能调整之外还存在接口变化,不能只按普通补丁修复理解。
路由生成修复保留了看起来像占位符的参数值,避免把参数内容再次替换。WSGIMiddleware 则只在完整路径段边界剥离 root_path,避免将相似前缀误截。异常处理结束后清理 traceback 的修复,也减少了复用异常实例时请求对象被持续引用的问题。
官方发布页与官网日志共同列出了这些调整。已有测试若把重复参数的顺序视为无关,比较结果可能改变;使用内部表单事件对象的扩展也需要对应检查。普通表单接收与内部解析接口,应分别判断升级影响。










