corpid-resolve.php
✔ 隔离库 jnc_ma_e2e_h8 就绪(105 张表,缺列 0)
【前置:夹具取到了吗(取不到,后面全部无意义)】
✅ 库里至少一家企业
✅ domain1 非空
✅ corp id 是正整数
✅ DEV_TRUSTED_HOSTS 里有带端口的开发 host
✅ APP_DEBUG 为真(开发白名单那一支才可测)
domain1=ffjnc.ownnote.cn corpid=1 devHost=localhost:20098 corp 行数=1
【A① CLI 且无 Host → 库里那一家的 id(AppSelfcheck / AppInstall / *MigrateOss 靠这条)】
✅ PHP_SAPI 确实是 cli(否则本组验的不是那一支)
✅ 无 Host → 库里那一家的 id
✅ 前置:开发库恰好一家企业(多于一家时上面那条应当改为抛)
【A①b CLI 且无 Host,但库里不止一家 → 抛(不许挑第一家)】
✅ CLI 一家→10000 / CLI 两家→DENY / 回环一家→10000 / 回环两家→DENY
【A② 开发主机白名单(APP_DEBUG + DEV_TRUSTED_HOSTS)→ 1】
✅ 带端口的开发 host localhost:20098
✅ 副本主机名 h3
✅ 裸 localhost
【A③ 命中 jnc_corp.domain1..5 → 该行 id(这才是真正的反查路径)】
✅ ffjnc.ownnote.cn → 1
✅ 大小写不敏感 + 去尾点后仍命中
✅ 带 scheme 与路径也归一得掉
【A④ 回环豁免(单企业)→ 该行 id —— 交付健康检查走的就是这一条】
✅ 127.0.0.1
✅ 127.0.0.1 带端口
✅ IPv6 [::1] 带端口
✅ _isLoopbackHost 只认这几个,不做 CIDR
✅ _isLoopbackHost 不误伤真域名
【A④b 🔴 关掉开发白名单(= 生产形态)后,回环仍然放行、开发主机则被拒】
✅ 前置:APP_DEBUG 真的被关掉了(否则本组验的还是白名单那一支)
✅ 裸 127.0.0.1(交付健康检查的形态)仍放行
✅ 裸 localhost(开发 compose 健康检查的形态)仍放行
✅ 规范域名不受影响
✅ 🔴 开发主机 h3 此时被拒(证明白名单确实由 APP_DEBUG 把关)
✅ localhost:20093 关掉 APP_DEBUG 后仍通行 —— 但走的是回环豁免那条闸
✅ 前置:上一条确实是回环形态(否则它验的不是那件事)
✅ 未知 Host 照旧被拒
✅ 收尾:APP_DEBUG 已还原
【A⑤ 🔴 未知 Host → 拒绝(不回落 1、不返 0)】
✅ evil.example.com
✅ evil.example.com:8443
✅ 长得像 domain1 的近似域名
✅ domain1 加个端口就不算命中(精确匹配,非前缀)
✅ 抛的是 UnknownSiteHostException
✅ 异常里带着 host(给日志用)
【A⑥ 🔴 反查路径不会重入 currentCorpid(踩中就是无限递归)】
✅ corpSelect(corp) 反查期间重入 currentCorpid 次数 = 0
✅ 对照组 corpDomains() 确实会重入(所以不许在解析器里调它)
【B 请求内 memo:同一进程里解析恰好一次】
✅ 第二次调用走 memo(Host 换掉也不重解析)
✅ 🔴 失败态也被 memo,重抛的是同一个异常对象
✅ withCorpContext 压栈优先于解析(cron 不受 Host 影响)
【C 真实 HTTP(容器内 127.0.0.1:80,与健康检查同一条路)】
✅ C1 规范域名 → 200
✅ C1 真的渲染出了页面(不是空 200)
✅ C2 🔴 未知 Host → 403
✅ C2 Content-Type 是 text/plain
✅ C2 body 不回吐请求的 Host(防反射)
✅ C2 body 里没有首页内容
✅ C3 交付健康检查那条路(Host: 127.0.0.1)→ 200
✅ C3 回环也真的渲染出了页面
✅ C3b 🔴 回环带非默认端口(不在 DEV_TRUSTED_HOSTS 里)→ 200,这条才验得到回环豁免
✅ C3b 也真的渲染出了页面
✅ C4 🔴 非 CLI 且无 Host 头 → 403(不许当成 CLI 回落到 1)
PASS=51 FAIL=0
✔ 已销毁 jnc_ma_e2e_h8