問題
HTTP的狀態碼有哪些,并用例子說明一下
我的回答
HTTP狀態碼是服務器對客戶端請求的響應碼,它們按照不同的功能被分為五大類。我來介紹一下主要的狀態碼及其實際應用場景:
1xx(信息性狀態碼):表示請求已接收,需要繼續處理。
- 100 Continue:服務器已收到請求的初始部分,客戶端應繼續發送剩余請求。比如當上傳大文件前,客戶端可以先發送帶有"Expect: 100-continue"頭的請求,服務器回應100后再開始上傳,避免不必要的數據傳輸。
- 101 Switching Protocols:服務器同意切換協議。例如,客戶端請求從HTTP切換到WebSocket時,服務器會返回101。
2xx(成功狀態碼):表示請求已成功接收、理解和處理。
- 200 OK:最常見的成功狀態碼,表示請求成功。例如,當你訪問一個網頁并成功加載時,服務器返回200。
- 201 Created:請求已完成,并創建了新資源。例如,通過POST請求創建新用戶后,返回201和新用戶的URL。
- 204 No Content:服務器成功處理了請求,但不需要返回任何內容。例如,刪除操作成功后可以返回204。
3xx(重定向狀態碼):表示客戶端需要采取進一步操作才能完成請求。
- 301 Moved Permanently:資源已永久移動到新位置。例如,網站域名變更后,舊域名會返回301并指向新域名,搜索引擎會更新索引。
- 302 Found:資源臨時位于不同的URL。例如,未登錄用戶訪問需要權限的頁面,被重定向到登錄頁面。
- 304 Not Modified:資源未修改,可使用緩存版本。例如,瀏覽器發送帶有If-Modified-Since頭的請求,如果內容未變,服務器返回304,瀏覽器使用緩存。
4xx(客戶端錯誤狀態碼):表示客戶端請求有錯誤。
- 400 Bad Request:請求語法錯誤。例如,提交表單時數據格式不正確。
- 401 Unauthorized:需要身份驗證。例如,訪問需要登錄的API時未提供有效的認證信息。
- 403 Forbidden:服務器理解請求但拒絕執行。例如,用戶嘗試訪問沒有權限的資源。
- 404 Not Found:服務器找不到請求的資源。例如,用戶訪問了不存在的URL。
- 429 Too Many Requests:用戶在給定時間內發送了太多請求。例如,API限制每分鐘最多100個請求,超出后返回429。
5xx(服務器錯誤狀態碼):表示服務器在處理請求時發生錯誤。
- 500 Internal Server Error:服務器遇到意外情況。例如,代碼中出現未捕獲的異常。
- 502 Bad Gateway:作為網關的服務器從上游服務器收到無效響應。例如,Nginx代理后端服務時,后端服務崩潰了。
- 503 Service Unavailable:服務器暫時不可用。例如,服務器正在維護或過載。
- 504 Gateway Timeout:作為網關的服務器未及時從上游服務器收到響應。例如,Nginx等待后端服務響應超時。
在實際工作中,了解這些狀態碼非常重要。比如,我曾經看到一個問題,用戶反饋某些圖片無法加載。通過檢查網絡請求,發現這些請求返回了304狀態碼,但客戶端緩存已損壞。解決方法是在請求URL添加版本參數,強制服務器返回200和完整內容。
正確理解和使用HTTP狀態碼,可以幫助我們設計更好的API,實現更有效的錯誤處理,并提高系統的可維護性。