LoveChengke
48e0c89394
fix(server): 纯 HTTP 部署下 CSP 的 upgrade-insecure-requests 会让管理端白屏
helmet 的**默认** CSP 自带 upgrade-insecure-requests,它让浏览器把页面**子资源**(JS/CSS)
请求全部改写成 https。而安装器的默认形态是 http://IP:端口 直连(没有 TLS),改写后的请求
必然连接失败 —— 表现是「HTML 外壳加载出来了(标签页标题正常)、脚本没加载(页面一片空白)」。
2026-10-05 用一行安装脚本在 Ubuntu 24.04 上装完后实测踩到。
改法:securityHeaders() 按请求挑策略 —— req.secure(直连 TLS,或反代下由
x-forwarded-proto 决定)走 buildHelmet(true),否则 buildHelmet(false):
- 明文请求不再下发 upgrade-insecure-requests(置 null 去掉 helmet 的默认指令);
- 明文请求也不再下发 HSTS(按规范浏览器本就忽略,没必要发);
- HTTPS 请求的行为与改动前完全一致,安全性没有被削弱。
本地实测(另起一份服务在 4100、TRUST_PROXY=1,避免扰动开发机上已有的 4000 实例):
明文请求的 CSP 里 upgrade-insecure-requests 出现 0 次、带 X-Forwarded-Proto: https 的
请求里出现 1 次;healthz 与首页均 200;tsc 与 ESLint 均无问题。
2026-10-05 20:02:30 +08:00
..
2026-10-05 16:39:38 +08:00
2026-10-05 16:39:38 +08:00
2026-10-05 20:02:30 +08:00
2026-10-05 16:39:38 +08:00
2026-10-05 16:39:38 +08:00
2026-09-11 21:57:38 +08:00
2026-10-05 16:39:38 +08:00
2026-10-05 16:39:38 +08:00
2026-09-11 21:57:38 +08:00