題目背景
你負責多站點 Web 平台。安全團隊想集中收集 CSP、Permissions-Policy、棄用與 intervention 報告,減少線上問題依賴使用者截圖。工程團隊提出 Reporting API:用 Reporting-Endpoints 宣告端點,瀏覽器以 application/reports+json 傳送報告,也可用 ReportingObserver 在頁面內觀察。請說明是否採用、分階段發布與成功指標。
面試官考察點
- 能否把「更早發現瀏覽器問題」轉成可衡量的使用者與業務結果。
- 是否理解 Reporting API 是 best-effort,不能當作可靠訊息通道。
- 能否處理瀏覽器支援差異、端點安全、隱私與資料治理。
- 是否能設計漸進式 rollout、告警去重與回滾條件。
澄清問題
先確認報告類型、目標瀏覽器、站點數量、目前 CSP/棄用告警基線、資料保留要求與團隊可處理的告警量。詢問端點是否已有鑑權、是否允許傳送 URL 片段,以及目標是減少事故、縮短修復時間,還是證明合規覆蓋。
30 秒回答
我會採用,但先把它定位為低成本、非關鍵路徑的診斷訊號。先用 report-only 與少量站點採樣,端點只接收允許的報告類型並做限速、去重與脫敏;同時保留既有日誌。用「可操作報告率、首次報告到修復時間、誤報率、端點成本與舊瀏覽器覆蓋率」評估,只有資料品質與隱私審查通過後才擴大。任何安全決策都不能依賴報告必達。
分步推導
1. 定義問題與替代方案
Reporting API 能統一承載 CSP、Permissions-Policy、COEP、Integrity、deprecation、crash 與 intervention 等報告。替代方案包括既有 RUM SDK、伺服器日誌和瀏覽器主控台;比較新增覆蓋、客戶端效能、資料敏感度與運維成本。
2. 設計最小可行訊號
先收集 csp-violation 與 deprecation,為每種型別設置獨立邏輯佇列。伺服器驗證 Content-Type: application/reports+json,限制報告大小、來源與欄位,按站點、版本、指紋去重。端點故障只損失診斷訊號,不影響頁面請求。
3. 處理可靠性與相容性
規範明確報告投遞不保證成功,使用者代理可能因網路或策略丟棄。MDN 也提示 Reporting API 在較新瀏覽器可用,舊裝置可能不支援。因此要按瀏覽器版本分層看覆蓋率,並保留伺服器日誌與 ReportingObserver 作補充;不能用「收到 0 份報告」推斷「沒有違規」。
4. 隱私、安全與發布閘門
報告可能包含 URL、使用者代理與策略資訊。端點應使用 HTTPS、鑑權或不可猜測路徑,過濾查詢參數,限制保留期並建立存取稽核。先 report-only、內部站點與 1% 流量,觀察端點負載、敏感欄位與告警可操作率,再擴大;發現 PII 洩露、成本異常或告警風暴就停用端點設定。
高品質示範回答
我會把專案定義為「瀏覽器策略與棄用的早期診斷層」,而不是新的日誌系統。決策門檻分三層:第一,價值驗證——在 10 個代表性站點用 report-only 採樣,確認報告能定位現有工單,並以平均發現時間建立基線;第二,風險驗證——安全與隱私審查端點欄位、保留期、跨站隔離與存取控制;第三,營運驗證——壓測報告峰值,設定每來源配額、去重鍵與丟棄率監控。Reporting API 投遞是 best-effort,所以保留 RUM、伺服器日誌與人工回退。上線後按瀏覽器族群展示覆蓋率,按報告類型統計可操作率、MTTR、誤報率、每百萬頁面報告量與成本。若某瀏覽器覆蓋不足,產品結論只針對已覆蓋流量;若端點異常,移除 Reporting-Endpoints 回應標頭即可回退,不改變核心頁面請求。
常見誤區
- 把 Reporting API 當成可靠佇列或合規稽核憑證。
- 看到報告量下降就宣布問題消失,沒有按瀏覽器覆蓋率校正。
- 直接把原始 URL、查詢參數與使用者代理長期儲存。
- 只討論 SDK 接入,不說明端點限流、去重、成本與告警負責人。
- 一次性全站開啟,缺少 report-only、採樣與明確回滾條件。
追問與應對
如果面試官問「為什麼不用 ReportingObserver?」
回答:它更容易在頁面內快速驗證和自訂處理,但頁面崩潰時無法繼續執行;遠端端點能獨立於頁面生命週期接收報告。兩者可並用,但都不能承諾必達。
如果問「如何證明專案有效?」
回答:建立上線前後對照,比較已確認問題的發現時間、修復時間、可操作率與誤報率,並按瀏覽器覆蓋率分層;同時監控端點成本與隱私事件。
如果問「舊瀏覽器沒有支援怎麼辦?」
回答:把支援矩陣當成產品約束,保留既有伺服器日誌/RUM,針對已覆蓋流量發布結論;不為追求統一而在不相容瀏覽器注入高成本 polyfill。