mark() 往代理响应上写 `x-lb-backend`,但跨域且无 CORS 允许头的响应其 headers guard 是 immutable,`set` 抛 `TypeError: Can't modify immutable headers.`;异常冒泡到 forwardWithFailover 的 catch 后被判成后端故障 (`backend ... unavailable (TypeError)`),重试耗尽返回 503。 后端一直健康:GET / 实际返回 200。/healthz 走 healthResponse() 自建 响应、不调 mark(),所以不受影响——这也正是它掩盖问题多年的原因。 mark() 现在在响应头不可变时静默放弃观测头,绝不阻塞响应返回;补两条 回归测试(2xx 不可变响应必须原样返回且不触发故障转移;5xx 不可变响应 仍正常故障转移)。 验证:wrangler dev --local 下 / /healthz /ready /api/status /assets/* 全部 200(修复前 / 与 /api/status 为 503);node --test 34/34 通过。 |
||
|---|---|---|
| .. | ||
| backends.test.js | ||
| health.test.js | ||
| index.test.js | ||
| lb.test.js | ||