Skip to content
FunCoding

Search

Search docs, Skills and MCP

HTTP 检查顺序与冷启动

定位 Host、Origin、bearer、日志和 JSON 解析各自覆盖的请求。

This page has not been translated into English yet. The original Chinese version is shown below.

排查 daemon 的 401、403、429 或缺少 span 时,应先判断请求在哪一层结束。正式 runtime 与冷启动 bootstrap app 的中间件不同,不能只看最终路由 handler。

正式运行时顺序

阶段主要责任
loopback same-origin 处理移除匹配本机监听来源的 Origin
access log 与 trace-id capture安装完成日志回调,提前提取入站 traceparent
Host 与 remote same-originloopback Host 防护;有 token 的远端同源请求先认证再移除 Origin
allowOriginCors使用可变允许列表拒绝未匹配 Origin
特定 pre-auth 路由条件 health、无秘密的 Web Shell 静态内容和独立认证 webhook
bearerAuth校验已配置 bearer;无 token 的受信本机模式透传
rate limit可选按 prompt、mutation、read 分层,早于解析请求体
JSON parser上限 10mb,解析失败返回 400
telemetry为到达此层的分类 API 建立请求 span
route mutation gate指定修改接口进一步要求 operator authority

mutation gate 按路由启用,不是覆盖全部请求的全局 app.use。已配置但缺失或错误的 bearer 通常在更早层返回普通 401;到达 strict gate 却缺少受信权限的请求可返回 token_required。

Host 与同源

loopback Host allowlist 核对允许的本机名称及实际端口,80/443 接受对应无端口形式。非 loopback 主监听依赖 bearer,Host allowlist 在该路径不做相同限制;Local Control LAN listener 仍有自己的 advertised-authority 检查。

远端同源判定使用直接 socket scheme 与规范化 Host,不读取 Forwarded 或 X-Forwarded-*。TLS 终止代理、改写 Host 的中间层或 WebSocket 因而可能仍需要 --allow-origin。

loopback 的跨端口隧道会先被 Host 检查拒绝,allow-origin 不能覆盖它。具体部署组合见Web Shell和TLS。

哪些路由可以在 bearer 前处理

普通 loopback 的 GET /health 可放在 bearer 前;--require-auth 或非 loopback 会把它放到认证后。Local Control listener 的 health 有独立认证要求。

Web Shell 页面、静态资源和精确文档导航在 bearer 前提供,因为普通导航不能附加 Authorization;静态 shell 本身不含会话秘密,API 仍走正常权限流程。缺失 UI assets 时可降为 API-only,--no-web 显式关闭 UI。

渠道 webhook 使用 x-qwen-webhook-secret,位于 daemon bearer 之前;轮换 daemon token 不会轮换 webhook secret。

Access log 与 span 的不同覆盖

正式 runtime 的日志 hook 位于多数 gate 之前,所以早退错误通常有访问日志;但精确 GET /health 与 POST */heartbeat 路径即使被 gate 拒绝也排除。HEAD /health、GET /health/ 并不享受同样排除,成功 SSE GET */events 也不写普通完成访问行。

普通访问日志使用容量 60、每秒补充 2 的预算;部分 pre-auth Host/CORS/remote-same-origin 拒绝使用独立容量 30、每秒补充 1 的预算。bearerAuth 的无 Origin 401 仍消耗普通预算,不应声称所有未认证流量都隔离到另一预算。

OTel 请求 span 位于认证、限流和 body parser 之后,这些早退没有该请求 span,但提前提取的 traceId 仍可出现在访问日志。见Trace 关联。

冷启动 bootstrap

冷启动 app 只直接回答 health、capabilities 和 daemon/status,使用较短的认证/Origin 链且不装 access log。其他路径经过 delegating wrapper 的 bearer gate 后启动正式 runtime,再交给它处理。

这类交接请求的 runtime durationMs 从交接处开始,不包含客户端感知到的全部冷启动时间。--open 直接启动正式 app,因此没有同样冷窗口。

请求体解析上限也不是进程内存上限;多个并发请求可能同时占用解析内存。容量与监听连接配置应一起评估,不能靠单请求 10mb 得出全进程安全预算。