Skip to content

请求生命周期 ​

一次 TCP 连接可以承载多次 HTTP 交互。每个交互都有独立的请求、响应和 AbortController,连接协调器决定何时开始下一次交互。

text
TCP 字节 → SegmentedInput → 扫描请求头 → 定界与输入策略
                                           │
                    ┌──────────────────────┴───────────────────┐
                    ↓                                          ↓
             IncomingBody                              Application.dispatch
         持续解码 / 读取背压                   onRequest → 中间件 → 路由 → 处理器
                    │                                          │
                    └──────── 处理器按需读取 ───────────────────┤
                                                               ↓
                                                    NovaResponse → sink
                                                               ↓
                                                      输出成功 / 取消
                                                               ↓
                                              检查输入消费与连接复用条件

请求头就绪 ​

扫描器完成有界头部解析,协议层生成 body 定界计划和连接意图。协调器先检查 body 策略、Expect 与不支持的连接模式,再构造请求元数据。应用可以在 body 尚未完整到达时开始执行。

并行推进输入与应用 ​

输入泵将 fixed/chunked 数据解码为 IncomingBody 视图,消费方读取触发恢复。应用超时从分发开始计时,body 输入空闲计时独立维护。业务提前返回而不消费 body 时,不允许直接复用连接。

完成响应 ​

NovaResponse 排队提交响应头、body 和结束操作;sink 负责 HTTP/1 定界及等待 socket drain。处理器返回与输出成功是两个时刻,Application 等待完成信号后才发出 onResponse。

下一次交互 ​

只有当前应用处理结束、响应可复用、输入消息完整且请求体消费完成,才允许处理后续请求。流水线字节可能已进入输入缓冲,但后续处理器不能越过当前响应。

失败路径 ​

提交前的业务错误可进入错误链;输出失败或提交后异常由协调层取消交互、失败请求体并关闭传输。首次失败原因应保持,旧交互的迟到通知不能取消新交互。实现说明见响应与取消。

Nova · Node.js HTTP framework