什麼是 HTTP 狀態碼?
HTTP 狀態碼是 Web 伺服器在用戶端(例如瀏覽器)發出請求後,回傳的三位數字回應碼,用以表示請求的執行情況。無論是工程師還是行銷人員,了解 HTTP 狀態碼都能幫助你快速排查錯誤,提升網站的運作效率。接下來,我們將透過分門別類的解說,讓你對 HTTP 狀態碼有更深入的了解!
HTTP 狀態碼五大類別:
- 1xx:資訊回應(暫時性狀態)
表示伺服器已收到請求,但尚未完成處理。 - 2xx:成功回應(請求已成功)
表示請求已被伺服器成功處理,例如經典的 200 OK。 - 3xx:重定向(需進一步操作)
通知客戶端需要採取其他行動以完成請求。 - 4xx:用戶端錯誤(請求出問題)
用戶端的請求可能有錯,例如 404 Not Found。 - 5xx:伺服器錯誤(伺服器出問題)
伺服器在處理請求時發生錯誤,例如 500 Internal Server Error
HTTP 狀態碼與解決方法
1xx:資訊回應(暫時性狀態)
1xx 狀態碼雖然不常見,通常用於大型文件的處理或協議的切換,告訴用戶端「伺服器已經開始處理,請稍等」。
1. 100 Continue
發生原因:當用戶端發送大文件時,伺服器要求確認是否繼續上傳。
- 排查步驟:
- 確認伺服器是否正確實現了 100 Continue 的支持。
- 檢查用戶端是否正確發送了 Expect: 100-continue 標頭。
- 解決方法:
- 在伺服器上配置支持 100 Continue 的機制。
- 測試用戶端和伺服器的交互,確保協議兼容。
2. 101 Switching Protocols
伺服器應用於協議切換,例如從 HTTP 切換到 WebSocket。
- 排查步驟:
- 檢查用戶端是否正確設置了 Upgrade 標頭。
- 驗證伺服器是否支持請求的新協議(如 WebSocket)。
- 解決方法:
- 確保伺服器已安裝並啟用所需的協議模組。
- 測試升級過程是否按預期執行。
102 Processing(WebDAV)
用於 WebDAV 協議中處理複雜的請求(如多步驟操作)。
- 排查步驟:
- 確認伺服器支持 WebDAV 並正確處理多步驟請求。
- 測試用戶端是否正確處理了延遲回應。
- 解決方法:
- 優化伺服器性能以縮短處理時間。
- 在長時間操作前返回 102 Processing,保持用戶端知情。
103 Early Hints
代表需要加速頁面渲染的情況,例如預加載 CSS、JavaScript 或圖像。
- 排查步驟:
- 檢查伺服器是否正確返回 Link 標頭和資源路徑。
- 確認用戶端瀏覽器是否支持 103 Early Hints 並進行預加載。
- 解決方法:
- 在伺服器端配置 103 Early Hints 和 Link 標頭,指定需要預加載的資源。
- 使用開發者工具檢查資源是否按預期被預加載,並根據需求優化資源順序。
2xx:成功(請求成功)
2xx 是最讓人滿意的狀態碼,因為它意味著請求成功並得到了預期的回應。
201 Created
請求成功,結果根據 HTTP 方法而異:
- GET:資源成功檢索,並在訊息主體中傳送。
- HEAD:僅包含標頭,無訊息主體。
- PUT/POST:回應包含操作結果的詳細資訊。
- TRACE:訊息主體返回伺服器接收到的請求。
排查步驟:
- 確保伺服器正確處理請求並返回 200 OK。
- 驗證用戶端是否成功解析伺服器回應。
解決方法:
- 確保伺服器的回應資料與請求方法相符。
- 測試各種請求方法,檢查是否返回預期結果。
202 Accepted
適用於需要較長處理時間的操作,例如批處理或後續操作。
排查步驟:
- 檢查伺服器是否記錄了請求,並安排後續處理。
- 確認用戶端是否預期到非同步處理。
解決方法:
- 設置通知機制,告知用戶端處理完成的狀態。
- 確保伺服器能夠跟蹤和完成後續請求操作。
203 Non-Authoritative Information
使用快取或鏡像伺服器時。
排查步驟:
- 驗證伺服器返回的資料來源是否正確。
- 檢查是否需要更新快取或備份資料。
解決方法:
- 優化伺服器快取策略,確保數據更新及時。
- 在適用情境下,優先返回 200 OK 以表示直接來源。
204 No Content
請求成功,但無內容返回。例如刪除操作成功但無需返回內容。
排查步驟:
- 驗證伺服器是否正確處理請求,且無需返回主體內容。
- 確認標頭資訊是否提供足夠的上下文。
解決方法:
- 優化伺服器邏輯,在適當情況下返回 204 No Content。
- 測試用戶端是否正確處理無內容回應。
205 Reset Content
伺服器指示用戶端重置當前的文檔或表單。表單清除後需要重置。
排查步驟:
- 驗證伺服器回應是否觸發用戶端的重置操作。
- 確保用戶端能夠正確執行重置行為。
解決方法:
- 配置伺服器返回 205 Reset Content,並記錄用戶端重置行為。
- 測試用戶端是否成功響應。
206 Partial Content
用戶端請求部分資源,伺服器成功返回範圍內的資料。如音視頻流或大文件下載分段。
排查步驟:
- 檢查伺服器是否正確支持 Range 標頭。
- 驗證用戶端是否正確請求資源範圍。
解決方法:
- 在伺服器啟用範圍請求支持,確保數據分段正確。
- 使用開發者工具測試資源的分段下載和播放。
207 Multi-Status (WebDAV)
用於傳遞多個資源的狀態資訊。在 WebDAV 操作中,對多個資源執行批量操作。
排查步驟:
- 檢查伺服器是否返回了多個資源的狀態代碼。
- 驗證用戶端是否正確處理多狀態回應。
解決方法:
- 優化伺服器邏輯以正確傳遞多狀態資訊。
- 測試用戶端對多狀態回應的兼容性。
208 Already Reported (WebDAV)
避免在多重綁定中重複列舉內部成員。適用於 WebDAV 場景的綁定管理。
排查步驟:
- 確認伺服器是否正確避免重複列舉。
- 驗證用戶端是否正確解釋已報告的狀態。
解決方法:
- 優化 WebDAV 伺服器以避免冗餘列舉。
- 確保多重綁定的狀態回應一致。
226 IM Used
伺服器應用了一個或多個操作於資源,並返回結果。增量編碼的情境下,用於提供差異內容。
排查步驟:
- 檢查伺服器是否正確實施了增量編碼操作。
- 驗證用戶端是否支持並正確解釋增量回應。
解決方法:
- 配置伺服器支持增量編碼,提升回應效率。
- 測試用戶端是否正確處理增量數據。
3xx:重定向(需進一步操作)
當你需要將用戶導向其他資源時,伺服器會返回 3xx 狀態碼,讓用戶端自動跳轉到新位置。
300 Multiple Choices
該請求有多個可能的回應,伺服器無法自行選擇具體的選項,需用戶端決定。多種語言版本的網站頁面,伺服器提供多個選擇。
- 排查步驟:
- 檢查是否提供了所有可用資源的鏈接。
- 驗證回應中的選項是否完整且清晰。
- 解決方法:
- 使用 HTML 鏈接提供用戶選擇。
- 優化自動選擇邏輯(例如根據地區或語言偏好)。
301 Moved Permanently
所請求的資源的 URL 已永久更改,新的 URL 在 Location 標頭中指定。網站結構調整或頁面永久搬遷。
- 排查步驟:
- 確認 Location 標頭是否正確指向新的 URL。
- 測試是否對舊 URL 的請求返回了正確的 301 狀態碼。
- 解決方法:
- 配置伺服器進行永久重定向。
- 更新站內和站外所有指向舊 URL 的連結。
302 Found
所請求的資源的 URI 已暫時更改,但用戶端應繼續使用舊 URI。臨時的頁面轉向(例如活動頁面)。
- 排查步驟:
- 驗證重定向邏輯是否正確。
- 確保回應中的 Location 標頭指向暫時的 URI。
- 解決方法:
- 使用伺服器配置臨時重定向。
- 為未來的穩定性,考慮設置過渡期限。
303 See Other
伺服器指示用戶端應以 GET 請求在另一個 URI 獲取資源。表單提交後的頁面重定向。
- 排查步驟:
- 確保表單提交後的重定向使用了 303 狀態碼。
- 驗證 Location 標頭的 URI 是否有效。
- 解決方法:
- 配置伺服器在表單提交後返回正確的 URI。
- 測試瀏覽器在重定向後的行為。
304 Not Modified
此狀態碼用於緩存目的,告訴用戶端其緩存的版本仍然有效。靜態資源(如圖片、CSS 文件)的版本控制。
- 排查步驟:
- 驗證請求中是否包含有效的 If-Modified-Since 或 ETag 標頭。
- 確保伺服器正確處理緩存檢查邏輯。
- 解決方法:
- 設置正確的 HTTP 緩存控制標頭。
- 測試瀏覽器是否正確緩存資源。
305 Use Proxy(已棄用)
此狀態碼指示所請求的資源必須通過代理訪問,但已被 HTTP 標準棄用,因其存在安全問題。
- 建議:避免使用此狀態碼,直接提供安全的代理設定文件。
306 unused
此狀態碼已棄用,僅保留作為占位符。
- 建議:無需處理,確保伺服器不返回此狀態碼即可。
307 Temporary Redirect
伺服器指示用戶端以相同的請求方法(如 POST)在另一個 URI 獲取資源。臨時重定向且保留請求方法(如支付流程中間頁)。
- 排查步驟:
- 確保重定向的 URL 是暫時性的。
- 測試是否保留了請求方法。
- 解決方法:
- 配置伺服器返回 307 狀態碼和正確的 Location 標頭。
- 測試不同用戶代理對重定向的行為。
308 Permanent Redirect
資源永久移動到另一個 URI,並要求用戶端保留請求方法。長期使用的 API 接口升級。
- 排查步驟:
- 確保新的 URI 是永久有效的。
- 測試請求方法是否正確被保留。
- 解決方法:
- 設置伺服器返回 308 狀態碼。
- 更新所有可能影響的用戶端請求。
4xx:用戶端錯誤(請求問題)
用戶端的請求有問題,可能是錯誤的網址、無權限訪問,或格式不正確。
400 Bad Request
伺服器無法處理請求,通常是因為錯誤的請求語法、無效的訊息框架或欺騙性的路由。用戶端未提供正確的請求格式。
- 排查步驟:
- 檢查請求 URL 和標頭的格式是否正確。
- 驗證請求體是否包含必要的參數或數據。
- 解決方法:
- 修復請求中的格式錯誤。
- 更新 API 文檔以確保用戶端的正確使用。
401 Unauthorized
用戶端未進行身份驗證,因此無法存取所請求的資源。用戶端未提供有效的身份驗證憑據。
- 排查步驟:
- 確認請求是否包含有效的身份驗證標頭(如 Authorization)。
- 驗證伺服器的身份驗證機制是否正常工作。
- 解決方法:
- 提供正確的身份驗證憑據。
- 使用 HTTPS 確保憑據傳輸的安全性。
403 Forbidden
用戶端沒有權限存取該資源,即使已通過身份驗證。伺服器禁止已知用戶存取某些資源。
- 排查步驟:
- 確認使用者是否具有必要的存取權限。
- 檢查伺服器配置文件中的存取控制列表(ACL)。
- 解決方法:
- 更新用戶的存取權限。
- 調整伺服器的資源訪問策略。
404 Not Found
伺服器找不到所請求的資源。這是最常見的 HTTP 狀態碼之一。用戶端請求了一個不存在的 URL。
- 排查步驟:
- 驗證請求的 URL 是否正確。
- 確保伺服器上的資源仍可用且未被刪除。
- 解決方法:
- 修正錯誤的 URL。
- 為已刪除的資源設置適當的重定向(如 301 或 410)。
405 Method Not Allowed
所請求的 HTTP 方法不被目標資源支援。例如嘗試對不支援 DELETE 的資源使用 DELETE 方法。
- 排查步驟:
- 確認伺服器支持的 HTTP 方法。
- 檢查 API 文檔以了解資源的可用方法。
- 解決方法:
- 改用支持的 HTTP 方法。
- 更新 API 以支援新方法。
406 Not Acceptable
伺服器無法提供符合用戶代理標準的內容。用戶端請求了不支持的內容類型。
- 排查步驟:
- 驗證請求標頭中的 Accept 是否正確。
- 確認伺服器是否支持所請求的內容格式。
- 解決方法:
- 調整用戶端的 Accept 標頭。
- 更新伺服器以提供兼容的內容。
408 Request Timeout
用戶端未在伺服器等待時間內完成請求。伺服器關閉了未使用的閒置連接。
- 排查步驟:
- 檢查伺服器的超時設置。
- 確認網絡是否正常。
- 解決方法:
- 增加伺服器的超時時間。
- 優化請求性能以減少延遲。
409 Conflict
用戶端的請求與伺服器當前的狀態衝突。嘗試更新的資源已被其他用戶修改。
- 排查步驟:
- 驗證資源的版本控制是否一致。
- 確認沒有其他用戶同時修改該資源。
- 解決方法:
- 提供用戶端解決衝突的選項。
- 使用版本控制系統處理多用戶的操作。
410 Gone
資源已永久刪除且無法訪問。舊頁面被刪除且沒有替代頁面。
- 排查步驟:
- 確認資源是否被永久刪除。
- 確認沒有其他用戶仍在訪問該資源。
- 解決方法:
- 更新站內的所有連結以避免指向刪除的資源。
- 提供用戶有用的替代內容。
429 Too Many Requests
用戶端在給定時間內發送了過多的請求。API 的速率限制超過了伺服器的配置。
- 排查步驟:
- 檢查伺服器是否正確實現速率限制。
- 確認用戶端的請求頻率是否超出限制。
- 解決方法:
- 改善用戶端請求模式以遵守速率限制。
- 在伺服器端返回適當的 Retry-After 標頭,指示用戶端何時可以重試。
5xx:伺服器錯誤(伺服器問題)
當伺服器因內部問題無法完成請求時,會返回 5xx 狀態碼。這類錯誤通常需要伺服器管理員介入解決。像是廚房炸裂或是主廚離職因此無法準備餐點「抱歉,我們無法準備你的餐點。」
500 Internal Server Error
伺服器發生未知錯誤,無法完成請求。
- 原因:
- 伺服器內部程式碼錯誤。
- 未預期的情況(例如資源過載)。
- 排查步驟:
- 檢查伺服器日誌,尋找具體錯誤信息。
- 確認後端程式是否存在錯誤或未處理的例外情況。
- 測試伺服器的資源使用情況,例如內存或硬碟是否已滿。
501 Not Implemented
伺服器不支援所請求的方法,無法執行。
- 原因:
- 使用的 HTTP 方法(例如 DELETE 或 PATCH)未在伺服器中啟用。
- 排查步驟:
- 確認伺服器是否支援該方法(至少應支援 GET 和 HEAD)。
- 更新伺服器配置,啟用必要的方法。
502 Bad Gateway
伺服器作為閘道器,收到無效的回應。
- 原因:
- 伺服器上游服務無法正常運行。
- 網路連接問題或伺服器間的通信失敗。
- 排查步驟:
- 確認上游伺服器是否正常工作。
- 測試伺服器之間的連接是否正常。
- 驗證反向代理或負載平衡器的配置。
503 Service Unavailable
伺服器暫時無法處理請求(維護或負載過重)。
- 原因:
- 伺服器過載。
- 正在進行維護操作。
- 排查步驟:
- 檢查伺服器資源使用率(CPU、RAM)。
- 確保伺服器配置了「Retry-After」標頭,以指示何時恢復服務。
- 提供一個友好的維護頁面,告知用戶情況。
504 Gateway Timeout
伺服器作為閘道器,等待上游伺服器回應時超時。
- 原因:
- 上游伺服器響應緩慢。
- 伺服器間的連接中斷。
- 排查步驟:
- 確認上游伺服器的健康狀態。
- 增加伺服器的連接超時時間配置。
- 優化上游伺服器的處理速度。
505 HTTP Version Not Supported
伺服器不支援所請求的 HTTP 協議版本。
- 原因:
- 使用的 HTTP 協議版本(如 HTTP/1.0)過時。
- 排查步驟:
- 檢查用戶端的 HTTP 請求頭,確認所用版本。
- 確保伺服器配置支援常見的 HTTP 協議版本(如 HTTP/1.1 或 HTTP/2)。
506 Variant Also Negotiates
伺服器的內容協商配置有問題,無法確定適合的資源變體。
- 原因:
- 配置錯誤導致資源無法選定合適的版本。
- 排查步驟:
- 檢查伺服器的內容協商配置。
- 確認變體資源的優先級配置是否正確。
507 Insufficient Storage(WebDAV)
伺服器存儲空間不足,無法處理請求。
- 原因:
- 伺服器硬碟或分區空間不足。
- 排查步驟:
- 確認伺服器的可用硬碟空間。
- 清理不必要的檔案或升級存儲空間。
508 Loop Detected(WebDAV)
請求中檢測到無限循環。
- 原因:
- 資源配置或代碼邏輯中存在無限遞歸。
- 排查步驟:
- 檢查伺服器配置中是否存在重複引用的資源。
- 優化代碼以防止循環邏輯。
510 Not Extended
伺服器需要額外資訊來完成請求。
- 原因:
- 請求中缺少伺服器要求的擴展。
- 排查步驟:
- 確認伺服器需要的擴展協議。
- 更新用戶端請求以包括必要資訊。
511 Network Authentication Required
用戶端需要進行身份驗證才能獲取網路訪問。
- 原因:
- 使用的網路需要進行驗證(例如公共 Wi-Fi 的登入頁面)。
- 排查步驟:
- 檢查用戶端是否需要訪問登入頁面。
- 確認伺服器網路驗證的配置是否正常。
如何學習與了解 HTTP 狀態碼?
1. 理解狀態碼的作用
每個狀態碼都描述了一個特定的請求回應情況,例如用戶的瀏覽行為(4xx)或伺服器的處理邏輯(5xx)。
2. 參考官方資源與工具
官方文檔:
線上工具:
3. 實際操作與檢測
使用開發者工具或線上工具測試各種狀態碼的行為。
結論:掌握 HTTP 狀態碼,提升網站性能!
熟悉 HTTP 狀態碼不僅能幫助網站快速排查錯誤,還能優化用戶體驗與 SEO 表現。所以無論是排查錯誤還是進行網站優化,熟悉 HTTP 狀態碼可以說是必備技能。
–
如果你本身沒有程式設計的背景,或是你需要設計一個功能強大、結構清晰的網站,可以聯繫專業的網站設計公司,像是我們的專業團隊,可以輕鬆協助你架設一個符合SEO整體的網站架構!
👉 現在就聯繫我們,掌握更多網站設計與優化技巧! 🚀
歡迎你在下方訂閱我們的部落格,我們將於每周發送與網站架設相關的最新知識!感謝你的閱讀!