具代表性的面試主題

後端面試:如何設計 HTTP RateLimit 回應標頭契約

後端困難
Offer.cc 編輯團隊發佈 更新

題幹

你的 API 經由 CDN 與閘道服務多個租戶。客戶端只能從 429 猜配額,造成重試突發。以 2026 年 IETF RateLimit 標頭草案為提案,設計服務端與客戶端契約:RateLimit-Policy 與 RateLimit 分別表達什麼,快取和中介層如何處理,哪些保證不能暗示?

題目與範圍

本題考察 API 協定邊界設計。參考文件是 2026 年 5 月 23 日發布的 Internet-Draft,尚不是 RFC;回答先說明此狀態。部署可能只採用部分欄位,因此契約要能安全降級。

面試官考察什麼

  • 清楚區分配額策略中繼資料與目前可用配額。
  • 結構化欄位解析、多時間視窗、配額單位與分區鍵。
  • 與 429、Retry-After、閘道、CDN 及快取陳舊值的關係。
  • 暴露限額造成的隱私與拒絕服務風險。
  • 客戶端把提示視為非綁定資訊,能處理缺失或畸形欄位並退避。

建議答題結構

先定義配額維度與責任歸屬。展示包含策略與目前限額的回應,再解釋客戶端如何排隊。補充快取與中介層規則、安全約束、觀測指標,以及帶功能開關的漸進發布,讓草案變化不破壞客戶端。

深入拆解:提供有用提示但不承諾容量

分離策略與目前狀態

RateLimit-Policy 描述命名配額,例如 "tenant";q=1000;w=60RateLimit 回報目前可用配額與有效視窗,例如 "tenant";r=420;t=23。策略可含多個項目與可變視窗。服務端仍是最終權威;這些值是提示,不是租約或服務等級保證。

定義分區與單位語義

說明一個配額單位代表請求、位元組、Token 或加權操作。分區鍵可區分租戶或資源,但不要把電郵、原始使用者 ID 或密鑰放入標頭。策略名稱應穩定並帶版本;不改名稱卻改變單位會讓客戶端節流失效。

協調 429 與 Retry-After

服務端知道拒絕請求何時可再次嘗試時回傳 Retry-After。兩者同時出現時,客戶端優先遵守 Retry-AfterRateLimit 用於安排後續工作。草案沒有規定具體節流演算法,所以客戶端仍需封頂指數退避、抖動、截止時間與寫入操作冪等規則。

讓快取和中介層參與契約

快取回應的 RateLimit 可能陳舊,回應具有正的 current age 時應忽略。不了解配額語義的中介層不能讓回應看起來更寬鬆。強制更嚴格限額的閘道可以傳達更嚴格策略,同時在遙測中區分源站與閘道決定。

保護可用性與隱私

不要暴露會洩露流量規模或放大攻擊的超大視窗。限制可用配額與視窗的比值,校驗結構化欄位並忽略畸形值。容量緊張時可以降低廣告值,但客戶端仍須處理拒絕,因為上一次提示健康不代表本次一定成功。

範例回答

「我會按租戶與操作定義帶版本的命名策略,明確單位,並把策略中繼資料與目前剩餘配額分開。該文件仍是 Internet-Draft,因此客戶端把兩類欄位都當作可選提示。被拒絕的請求由 Retry-After 指導,RateLimit 安排後續速度。CDN 讓陳舊值失效,閘道不會把源站限額放寬,分區鍵不含身分資訊。SDK 防禦性解析結構化欄位,使用抖動與共享佇列;先按 SDK 版本灰度並記錄宣稱限額與實際執行限額。」

常見失誤與修正

  • 把草案稱為 RFC → 記錄 Internet-Draft 狀態,並用版本化契約隔離。
  • 把剩餘配額當作許可 → 它只是提示;容量緊張時服務端仍可拒絕。
  • 在分區鍵放使用者識別 → 使用不透明、低基數名稱並評估隱私暴露。
  • 信任快取標頭 → 忽略陳舊值,由源站執行限額。
  • 每次 429 立即重試 → 遵守 Retry-After,加入抖動並按方法定義冪等性。

評分標準與自檢

評分點包括策略/狀態分離、單位與分區、429 互動、快取行為、隱私、客戶端節流、灰度安全與指標。高品質回答應說明每個欄位的含義、不能保證什麼,以及欄位缺失、陳舊或畸形時客戶端如何行動。

追問與延伸

回應含有兩個視窗怎麼辦?

按最先耗盡的約束安排速度,同時保留全部項目用於觀測。SDK 不應把單位或分區鍵不同的視窗悄悄合併。

成功回應應包含 RateLimit 嗎?

可以,但客戶端不能假定每個回應都有。只有在產品確實需要時傳送,並確保快取不會把舊值變成目前承諾。

如何發布變化中的草案?

協商回應標頭設定或策略版本,記錄解析降級,按 SDK 版本灰度;新欄位保持可選,同時穩定 429 與 Retry-After 行為。

哪些指標證明契約有效?

按閘道與 SDK 版本記錄宣稱與執行限額、陳舊值決策、429 率、重試放大、佇列延遲、最終成功率及隱私安全的分區基數。

公開來源

同類題目