現象
JSP 設定 `<%@ page errorPage="ErrPage.jsp" %>`,Chrome 正常顯示自定義錯誤頁,IE/Edge 卻顯示瀏覽器內建的「友好 HTTP 錯誤訊息」或 500 頁面。
根因
IE/Edge 預設啟用「顯示友好 HTTP 錯誤訊息」,當回應體小於特定大小(約 512 bytes)且狀態碼 ≥ 400 時,會**攔截伺服器回應並顯示內建頁面**。
解決方案(任一即可)
- 客戶端設定(僅供開發測試):
IE → 網際網路選項 → 進階 → 取消勾選「顯示友好 HTTP 錯誤訊息」。
- 伺服器端:擴大錯誤頁回應體(推薦):
在 `ErrPage.jsp` 中輸出足夠內容(> 1KB),如加入隱藏註釋或詳細堆疊追蹤:
`<%-- padding to exceed 512 bytes --%>`
或設定 `response.setStatus(HttpServletResponse.SC_OK);` 偽裝 200 狀態碼(不推薦,違背語義)。
- Tomcat 配置:自定義錯誤頁面(生產環境標準做法):
在 `web.xml` 定義:
```xml
500
/ErrPage.jsp
```
Tomcat 直接處理,繞過 JSP `errorPage` 指令,回應體由錯誤頁 JSP 完全控制。
驗證
使用 Chrome DevTools / Fiddler 檢查回應:狀態碼 500、Content-Length > 512、內容為自定義錯誤頁 HTML,即可確認生效。
採用 `web.xml` 統一錯誤頁配置 + 確保回應體足夠大,徹底解決瀏覽器攔截問題。