跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

HTTP 检查顺序与冷启动

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

排查 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 得出全进程安全预算。