文章中英模式
布魯斯前端面試題目 - 常見HTTP狀態碼
整理常見HTTP狀態碼的含義、使用場景與實例。掌握前端面試中經常被問到的HTTP狀態碼相關知識,提升API開發與錯誤處理能力。
文章中英模式
懶得看文章?那就來看影片吧
HTTP狀態碼概述
HTTP狀態碼是服務器對客戶端HTTP請求的響應代碼,用三位數字表示不同的響應結果。
- 1. 2xx - 成功: 請求已成功接收、理解和接受 (例如: 200 OK - 請求成功)
- 2. 3xx - 重定向: 需要進一步操作才能完成請求 (例如: 301 Moved Permanently - 網址永久轉移)
- 3. 4xx - 客戶端錯誤: 請求包含語法錯誤或無法完成 (例如: 401 Unauthorized - 未授權訪問, 403 Forbidden - 禁止訪問, 404 Not Found - 資源不存在)
- 4. 5xx - 服務器錯誤: 服務器在處理請求時發生錯誤 (例如: 500 Internal Server Error - 伺服器內部錯誤)
2xx - 成功狀態碼
200 OK
請求成功。返回的信息取決於請求方法:
- 1. GET: 資源已獲取並在響應中返回
- 2. POST: 資源創建成功,新資源在響應中返回
- 3. PUT/PATCH: 資源更新成功
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 42
{"message": "資源請求成功", "data": {...}}
201 Created
請求成功並創建了新資源。通常用於POST請求後。
HTTP/1.1 201 Created
Location: /api/resources/12345
Content-Type: application/json
Content-Length: 42
{"id": "12345", "name": "新資源", "created_at": "..."}
204 No Content
請求成功,但沒有返回任何內容。常用於PUT, PATCH或DELETE操作。
HTTP/1.1 204 No Content
Date: Wed, 21 Oct 2023 13:45:26 GMT
3xx - 重定向狀態碼
301 Moved Permanently
請求的資源已永久移動到新位置。瀏覽器會自動跳轉並緩存該重定向。
HTTP/1.1 301 Moved Permanently
Location: https://www.example.com/new-url
Content-Type: text/html
302 Found (臨時重定向)
請求的資源臨時位於不同的URL。不同於301,瀏覽器不應永久緩存此重定向。
HTTP/1.1 302 Found
Location: https://www.example.com/temporary-url
Content-Type: text/html
304 Not Modified
資源未修改,可使用緩存版本。通常是對包含If-Modified-Since或If-None-Match頭的請求的響應。
HTTP/1.1 304 Not Modified
Date: Wed, 21 Oct 2023 07:28:00 GMT
ETag: "737060cd8c284d8af7ad3082f209582d"
Cache-Control: max-age=3600
4xx - 客戶端錯誤狀態碼
400 Bad Request
服務器無法理解請求的格式,客戶端應修改請求後再次發送。
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 35
{"error": "請求參數格式不正確"}
401 Unauthorized
沒有進行身份驗證或身份驗證失敗。響應必須包括WWW-Authenticate頭以指示客戶端如何認證。
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Access to the staging site"
Content-Type: application/json
Content-Length: 27
{"error": "需要身份驗證"}
403 Forbidden
服務器理解請求但拒絕執行,權限不足。不同於401,身份驗證不會改變結果。
HTTP/1.1 403 Forbidden
Content-Type: application/json
Content-Length: 29
{"error": "沒有訪問權限"}
404 Not Found
請求的資源不存在。也可能表示不願透露資源存在與否。
HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 27
{"error": "資源不存在"}
405 Method Not Allowed
請求方法不支持。應返回Allow頭,說明允許使用的方法。
HTTP/1.1 405 Method Not Allowed
Allow: GET, POST
Content-Type: application/json
Content-Length: 41
{"error": "不支持PUT方法於此資源"}
429 Too Many Requests
用戶在給定時間內發送了太多請求(「限流」)。
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 3600
Content-Length: 41
{"error": "請求頻率超限,請1小時後重試"}
5xx - 服務器錯誤狀態碼
500 Internal Server Error
服務器遇到了意料之外的情況,無法完成請求。
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
Content-Length: 36
{"error": "服務器內部錯誤"}
502 Bad Gateway
作為網關或代理的服務器從上游服務器收到無效響應。
HTTP/1.1 502 Bad Gateway
Content-Type: application/json
Content-Length: 31
{"error": "上游服務器響應無效"}
503 Service Unavailable
服務器暫時過載或維護中。Retry-After頭可指示客戶端多久後重試。
HTTP/1.1 503 Service Unavailable
Retry-After: 120
Content-Type: application/json
Content-Length: 56
{"error": "服務暫時不可用,請2分鐘後重試"}
504 Gateway Timeout
作為網關或代理的服務器在等待上游服務器響應時超時。
HTTP/1.1 504 Gateway Timeout
Content-Type: application/json
Content-Length: 31
{"error": "上游服務器響應超時"}
🔥 常見面試題目
(一) 401和403狀態碼有什麼區別?
401 Unauthorized
「我不認識你,請先登錄」
用戶未提供身份驗證或驗證失敗
403 Forbidden
「我認識你,但你沒權限」
用戶已認證,但權限不足
(二) 301和302重定向有什麼不同?
301 永久重定向
網址永久搬家,以後都去新地址
瀏覽器會記住新地址
SEO:排名權重轉移到新網址
使用場景:
- 1. 網站域名變更
- 2. 強制使用HTTPS
302 臨時重定向
網址暫時換地方,下次還是來原地址
瀏覽器每次都會先訪問原網址
SEO:排名保留在原網址
使用場景:
- 1. A/B測試
- 2. 維護期間臨時頁面
(三) 前端如何處理HTTP錯誤碼?
設置全局錯誤處理器
針對不同錯誤碼採取不同措施
顯示用戶友好的錯誤信息
記錄錯誤並上報分析
// Axios全局錯誤處理簡例
axios.interceptors.response.use(
response => response,
error => {
if (error.response) {
switch (error.response.status) {
case 401: // 未授權
router.push('/login');
break;
case 403: // 權限不足
showMessage('你沒有權限執行此操作');
break;
case 404: // 資源不存在
showMessage('請求的資源不存在');
break;
case 500: // 服務器錯誤
showMessage('服務器出錯,請稍後重試');
reportError(error);
break;
}
} else {
showMessage('網絡連接失敗');
}
return Promise.reject(error);
}
);
(四) 200 OK和204 No Content的區別?
200 OK
請求成功,這是你要的數據
適用場景:
- 1. GET請求獲取資源
- 2. 需要返回數據的操作
204 No Content
請求成功,但沒有數據返回
適用場景:
- 1. DELETE操作成功
- 2. 只需確認成功的操作
- 3. 節省流量的場景
(五) 500錯誤和504錯誤的區別?
500 Internal Server Error
服務器內部錯誤
👨💻 → 🖥️ ❌
服務器自身出錯
排查方向:
- 1. 檢查服務器錯誤日誌
- 2. 檢查應用程序代碼
- 3. 檢查數據庫連接
504 Gateway Timeout
網關超時錯誤
👨💻 → 🔄 → 🖥️ ⏱️
代理等待上游服務器超時
排查方向:
- 1. 檢查上游服務器狀態
- 2. 檢查代理超時設置
- 3. 檢查網絡連接