通用面试:HTTP 421 Misdirected Request 如何定位与安全重试?
题干与适用场景
一个启用了 HTTP/2 连接复用的客户端,在访问多个 HTTPS 域名时偶发收到 421 Misdirected Request。请说明该响应代表什么、如何区分协议路由问题与应用错误、如何排查 SNI/authority/代理链,并设计安全的重试行为。
面试官考察点
- 是否理解 421 表示请求到达了无法为目标 scheme 与 authority 提供响应的服务器。
- 能否关联 TLS SNI、证书、HTTP/2 连接复用和反向代理路由。
- 能否沿客户端、边缘、代理、源站完整追踪请求。
- 能否在不重复副作用的前提下选择新连接重试。
回答前需要澄清的问题
- 421 发生在 HTTP/1.1、HTTP/2 还是 HTTP/3,是否只在复用连接时出现?
- 请求的 scheme、authority、Host、SNI 和证书 SAN 是否一致?
- DNS、负载均衡、CDN 或服务网格是否会把多个域名送到同一连接?
- 代理是否改写 Host、authority 或 TLS 终止信息?
- 请求是否幂等,是否具备幂等键与可重试截止时间?
30 秒回答框架
421 表示服务器认为请求被错误地导向了当前连接或节点,不是普通业务 4xx。先记录 authority、SNI、证书、连接 ID 和代理跳转,比较成功与失败路径。若确认是连接复用或路由不匹配,客户端可以在新连接上重试,但只对幂等或有幂等键的请求自动执行,并限制次数。修复方向通常在连接池分组、SNI/Host 保留和代理路由,而不是盲目增加重试。
分步骤深入解答
第一步:解释 421 的边界
RFC 9110 将 421 定义为 origin server 认为请求被误导,无法为 URI 中的 scheme 与 authority 组合生成响应。它与资源不存在、权限不足或业务校验失败不同。
第二步:核对目标身份
从客户端日志提取 URL scheme、authority、Host、SNI、证书 SAN、ALPN 和连接复用标记。HTTPS 请求必须由覆盖目标 origin 的证书和正确的 TLS 身份承载,不能只看 DNS 解析结果。
第三步:检查连接池与复用
HTTP/2 允许一条连接承载多个请求,但服务器可能不接受把某个 authority 放在已建立连接上。检查连接池是否按代理、TLS 参数和 authority 正确分组,是否错误地复用旧连接。
第四步:沿代理链定位
在 CDN、网关、服务网格和源站分别记录请求 ID、authority、SNI、选中的 upstream 与响应码。比较成功请求和 421 请求经过的节点,识别 Host 改写、SNI 丢失或错误路由。
第五步:选择新连接重试
规范允许客户端收到 421 后在不同连接上重试。新连接必须重新完成 DNS、TLS、ALPN 和 authority 绑定;不能只在原连接上发送相同请求。重试前还要检查方法幂等性、请求体可重放性和截止时间。
第六步:修复服务端路由
确保边缘和源站按 scheme、authority、SNI 与证书配置一致,代理转发时保留必要字段。对于共享证书或通配域名,明确哪些域名可以共用连接,哪些必须隔离。
第七步:建立观测与回归验证
按 authority、连接 ID、协议版本、节点和证书版本统计 421 率。用多域名 HTTP/2 压测、连接复用开关和故障注入验证修复,确认新连接重试没有掩盖持续路由错误。
高质量示范回答
我会先确认 421 是否只出现在 HTTP/2 复用连接。日志同时记录 URL scheme、authority、Host、SNI、证书 SAN、ALPN、连接 ID 和代理 upstream;如果失败请求把 api.example.com 复用到只为 static.example.com 配置的连接,就符合 421 的语义。客户端只对 GET 或带幂等键的请求建立新连接重试一次,写操作先交给业务层确认。服务端则检查 CDN、网关和源站是否保留 authority 与 SNI,并按域名隔离连接池。最后按域名和节点观察 421 率,用多域名复用压测验证修复。
常见错误
- 把 421 当作 404、401 或普通 400,转而修改业务参数。
- 只检查 DNS,不检查 SNI、证书 SAN、authority 和代理转发。
- 收到 421 后在同一条连接上无限重试。
- 对有副作用的 POST 无幂等保障地自动重放。
- 只看最终客户端错误,不保留每一跳的连接和路由证据。
追问及应对
追问一:421 与 400 的关键区别是什么?
400 通常表示请求语法或消息格式无效;421 指向请求目标与当前服务器或连接不匹配,重点是路由、authority 和 TLS 身份。
追问二:为什么 HTTP/2 更容易暴露这个问题?
HTTP/2 允许多路复用和连接共用,客户端可能在一条 TLS 连接上发送多个 authority;服务器若不接受该组合就会返回 421。
追问三:换 IP 能解决吗?
不一定。若根因是连接池、SNI 或代理改写,换 IP 只是改变概率。应先验证新连接的 TLS 身份和完整路由链。
追问四:POST 什么时候能重试?
只有接口提供幂等键、服务端去重或业务明确允许重放时,且请求体仍可用、未超过截止时间,才自动重试。
追问五:如何证明是连接复用导致?
对比复用开启与关闭、连接 ID、authority 序列和失败节点;若新连接成功且复用路径稳定重现 421,证据更充分。
追问六:生产中应告警什么?
按 authority、协议、边缘节点和证书版本监控 421 比例、重试成功率和新连接建立量;突增通常提示路由或证书配置漂移。