題目與適用場景
頁面 HTML 產生較慢,但伺服器已知道可能需要的樣式、字型或 CDN 連線。請設計 103 Early Hints 的傳送策略,說明它與最終回應的關係、相容邊界與驗證方法。
本文適合後端、邊緣閘道與效能工程職位。假設請求最後會回傳 2xx 或重新導向,且資源清單可能因使用者、實驗或權限改變。
面試官考察什麼
- 是否理解 103 是暫時提示,不是最終回應,也不能承載業務狀態。
- 是否能依資源確定性、協定版本與跨來源行為決定傳送或略過。
- 是否能處理提示與最終回應不一致、重新導向與 CSP 的邊界。
- 是否會用真實瀏覽器、快取與協定分層指標證明收益,而非只看伺服器耗時。
回答前要釐清的問題
- 在產生最終 HTML 前是否已確定資源?不確定時傳送會增加無效下載。
- 連線是否為 HTTP/2 或更高?舊 HTTP/1.1 客戶端處理 informational response 可能不安全。
- 哪些資源值得提示?關鍵 CSS、字型或連線預熱與低優先級圖片的收益不同。
- 是否存在跨來源重新導向、CSP、使用者分流或權限差異?這些都會改變提示的有效性。
30 秒回答框架
「我把 103 視為可丟棄的效能提示,只傳送高信心且最終回應可能重用的 Link 資源。預設要求 HTTP/2 或更高,先在 CDN 與來源站協商清單,遇到跨來源重新導向或資源不確定就略過。最終回應仍要重複真實的 Link 與 CSP,業務邏輯不能依賴 103。灰度時同時量測首位元組、資源開始時間、有效命中率、重複下載與錯誤率,收益不足便關閉提示。」
逐步深入解法
1. 將提示與業務回應解耦
RFC 8297 將 103 定義為 informational response:客戶端可在等待最終回應時投機處理標頭,但不能把它當成最終中繼資料。伺服器只放效能提示,不放授權、價格或成功狀態。即使 103 被代理丟棄,最終回應仍須獨立正確。
2. 選擇高確定性的 Link
優先提示首屏必需的 CSS、字型或固定 CDN 的 preconnect。使用者分組、權限與 A/B 實驗會改變資源時,先計算安全交集,或直接略過。提示不等於強制下載,仍須遵守 as、CORS 與 CSP 約束。
3. 設定協定與重新導向閘門
相容性與安全要求使 HTTP/2 或更高成為預設閘門。若請求最後跨來源重新導向,瀏覽器可能丟棄第一條 103;閘道也可能合併或重排 informational response。代理鏈必須在灰度中確認 103 沒有被誤當成最終回應。
4. 處理 CSP 與最終回應不一致
103 可以攜帶限制預載的 CSP,但最終回應仍是權威策略。若伺服器後來發現資源錯誤,客戶端可能已開始預載;因此提示應只涵蓋低風險、可快取或可安全丟棄的資源。不要用 103 繞過最終 CSP。
5. 以分層指標驗證
對照組不傳送 103,實驗組只對 HTTP/2 或更高傳送。記錄 103 到達率、資源請求提前量、有效預載比例、重複請求、最終 LCP、頻寬與錯誤率。按快取命中、跨來源重新導向與裝置類型切片;伺服器 TTFB 變快但 LCP 不變時,應撤回方案。
高品質示範回答
我會先確認 103 只承載效能提示,最終回應不依賴它。對 HTTP/2 或更高的請求,我只提示高信心的首屏 CSS、字型或固定 CDN 連線;使用者分流、權限與跨來源重新導向讓資源清單不確定時就略過。閘道與瀏覽器灰度要驗證 informational response 沒被當成最終回應,最終回應繼續傳送真實 Link 與 CSP。發布時比較 103 到達率、有效命中率、重複下載、LCP、頻寬與錯誤率,按快取與裝置切片;若只有伺服器 TTFB 改善而使用者指標不變,就關閉 Early Hints。
常見失分點
- 錯誤表現:把 103 當成成功回應。失敗原因:它沒有業務完成語意,代理丟失也不應改變結果。修正方法:最終回應獨立完成授權、狀態與正文。
- 錯誤表現:對所有資源傳送 preload。失敗原因:動態頁面會產生無效下載、浪費頻寬與污染快取。修正方法:只提示高確定性資源,並以有效命中率驗收。
- 錯誤表現:忽略 HTTP/1.1 與代理鏈。失敗原因:舊客戶端可能錯誤處理 informational response。修正方法:設定協定閘門、代理相容測試與可關閉開關。
- 錯誤表現:只測 TTFB。失敗原因:提前提示不一定改善渲染,甚至可能增加頻寬競爭。修正方法:量測 LCP、重複請求、頻寬與錯誤率。
追問深入
如果 103 中的資源後來不需要了怎麼辦?
將 103 限制在可安全預取的資源,並接受少量投機成本;用無效下載率設定上限。不能用 103 保證資源一定會被使用。
跨來源重新導向時是否繼續傳送?
預設略過,或只提示與最終目標無關的安全連線預熱。瀏覽器可能丟棄第一條 103,代理也可能改變順序,必須依真實鏈路測試結果決定。
最終回應的 Link 與 103 不一致可以嗎?
可以,103 是提示,最終回應是權威結果;但差異過大代表預測器品質低,應縮小傳送範圍並監控重複下載。
如何避免 103 洩露使用者資訊?
不在提示中放權限、實驗分組或敏感 URL。依公開且低風險的資源集合產生,讓最終 CSP 與授權檢查繼續生效。
何時選擇普通 HTML preload 而不是 103?
當資源只有在 HTML 產生後才確定,或連線無法可靠傳遞 informational response 時,直接在最終 HTML 宣告 preload 更簡單。103 適合伺服器較晚產生 HTML、但較早知道資源集合的場景。