fix: 修复 TLS ConnectionState、SPA 回退、健康检查与监听小问题
This commit is contained in:
@@ -392,6 +392,42 @@
|
||||
- 影响:不完整 TLS/CONNECT 约 10s 内断开;超长 remaining length 的 CONNECT 不再让 mochi 预分配近 768KiB。
|
||||
- 未做:L-01 验收里「接真实 broker 只发 0x10」在 listener 层用 `OnMQTT` 回调等价覆盖(预读阶段即关闭,不进入 broker)。WebSocket 升级后超时只在 `ws.go` 设读 deadline,未另写 broker 测试(范围限制)。
|
||||
|
||||
### 复审修复 L-04
|
||||
|
||||
1. **TLS 包装连接实现 ConnectionState**
|
||||
- 原条款:DEVELOPMENT 第 8、12 节 HTTPS 时 Cookie 加 Secure;issue #23。
|
||||
- 实际做法:HTTP 且已 TLS 时返回 `tlsBufferedConn`,`ConnectionState()` 转发内层 `*tls.Conn`;明文仍用 `bufferedConn`,不加该方法。未改 `admin.Deps.SecureCookies`(serve.go 只允许改 SPA 与 listener 装配;`r.TLS` 恢复后 `IsHTTPS` 已足够)。未加 HSTS。
|
||||
- 原因:peek 把 `*tls.Conn` 包进 `bufferedConn` 后 net/http 不填 `r.TLS`。
|
||||
- 备选方案:ConnContext 回填(审查 A-01);或只靠 SecureCookies 兜底(本线明确不采用)。
|
||||
- 影响:直连 TLS 的管理员 Cookie 带 Secure。
|
||||
|
||||
### 复审修复 L-05
|
||||
|
||||
1. **后台静态页 SPA 回退**
|
||||
- 原条款:DEVELOPMENT 4.3「未知前端路由回 index.html」;issue #24。
|
||||
- 实际做法:`httpx.SPA`;`staticFileHandler` 改为调用它。目录与无扩展名路径回 `index.html`(`Cache-Control: no-cache`);有扩展名且不存在返回 404。未加 embeddist 的 Playwright e2e(属网页线;本线用 Go 单测与 serve `/endpoints` 覆盖)。
|
||||
- 原因:`http.FileServer` 找不到路径即 404。
|
||||
- 备选方案:在 listener mux 里写回退。
|
||||
- 影响:刷新 `/endpoints` 等前端路由得到 HTML。
|
||||
|
||||
### 复审修复 L-06
|
||||
|
||||
1. **健康检查走 HTTPS**
|
||||
- 原条款:PRD F21/F22;issue #25。
|
||||
- 实际做法:`cert_file` 非空且 `allow_plaintext=false` 时 `healthcheck` 请求 `https://`,`InsecureSkipVerify`(仅连 127.0.0.1 存活探测)。`deploy/config.docker.yaml` 改回 `allow_plaintext: false`。
|
||||
- 原因:配证书关明文后明文 `/healthz` 会被 listener 断开。
|
||||
- 备选方案:健康检查走独立明文端口。
|
||||
- 影响:推荐 TLS 部署下容器 HEALTHCHECK 可通过。issue 要求改 `healthcheck.go` 与 docker 示例,超出 serve.go 两段限制,按 issue 正文执行。
|
||||
|
||||
### 复审修复 L-07
|
||||
|
||||
1. **XFF / TLS 配置复用 / metrics 常量时间 / 单次 New**
|
||||
- 原条款:DEVELOPMENT 4.5、12;issue #26。
|
||||
- 实际做法:XFF 合并多行,无法解析则停并回退对端;带端口与 IPv6 方括号可解析。`tls.Config` 只建一次,证书检查 2 分钟。`/metrics` 令牌 SHA-256 后 `ConstantTimeCompare`。serve 先 `ParseTrustedProxies` 再只 `listener.New` 一次。WS 调用 `httpx.ClientIP`。未把失败计入 `LockAdminIP`。
|
||||
- 原因:两份 XFF 实现可伪造;每连接新 Config 无法会话恢复;二次 New 泄漏证书重载 goroutine。
|
||||
- 备选方案:metrics 失败锁定管理员 IP。
|
||||
- 影响:锁定按真实客户端 IP;TLS 重连可 DidResume。
|
||||
|
||||
## 消息 M
|
||||
|
||||
### M1 2026-09-30
|
||||
|
||||
Reference in New Issue
Block a user