具代表性的面試主題

通用面試:HTTP 421 Misdirected Request 如何定位與安全重試?

通用困難
Offer.cc 編輯團隊發佈 更新

題幹

用戶端偶發收到 HTTP 421 Misdirected Request。請說明它與 400 的區別、常見成因、排查路徑,以及用戶端何時可以換連線重試。

題幹與適用場景

一個啟用 HTTP/2 連線複用的用戶端,在訪問多個 HTTPS 網域時偶發收到 421 Misdirected Request。請說明回應代表什麼、如何區分協定路由問題與應用錯誤、如何排查 SNI/authority/代理鏈,並設計安全的重試行為。

面試官考察點

  • 是否理解 421 表示請求到達無法為目標 scheme 與 authority 提供回應的伺服器。
  • 能否關聯 TLS SNI、憑證、HTTP/2 連線複用與反向代理路由。
  • 能否沿用戶端、邊緣、代理、源站完整追蹤請求。
  • 能否在不重複副作用的前提下選擇新連線重試。

回答前需要釐清的問題

  1. 421 發生在 HTTP/1.1、HTTP/2 還是 HTTP/3,是否只在複用連線時出現?
  2. 請求的 scheme、authority、Host、SNI 與憑證 SAN 是否一致?
  3. DNS、負載平衡、CDN 或服務網格是否會把多個網域送到同一連線?
  4. 代理是否改寫 Host、authority 或 TLS 終止資訊?
  5. 請求是否冪等,是否具備冪等鍵與可重試截止時間?

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 比例、重試成功率與新連線建立量;突增通常提示路由或憑證設定漂移。

公開來源

同類題目