corpid-resolve.php

20260916-201504 轮 · 看它的历史
  ✔ 隔离库 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