/

11 10 月, 2023

HTTP狀態碼全面解析:3步快速排查錯誤和問題!

HTTP狀態碼

什麼是 HTTP 狀態碼?

HTTP 狀態碼是 Web 伺服器在用戶端(例如瀏覽器)發出請求後,回傳的三位數字回應碼,用以表示請求的執行情況。無論是工程師還是行銷人員,了解 HTTP 狀態碼都能幫助你快速排查錯誤,提升網站的運作效率。接下來,我們將透過分門別類的解說,讓你對 HTTP 狀態碼有更深入的了解!

HTTP 狀態碼五大類別:

  • 1xx:資訊回應(暫時性狀態)
    表示伺服器已收到請求,但尚未完成處理。
  • 2xx:成功回應(請求已成功)
    表示請求已被伺服器成功處理,例如經典的 200 OK
  • 3xx:重定向(需進一步操作)
    通知客戶端需要採取其他行動以完成請求。
  • 4xx:用戶端錯誤(請求出問題)
    用戶端的請求可能有錯,例如 404 Not Found
  • 5xx:伺服器錯誤(伺服器出問題)
    伺服器在處理請求時發生錯誤,例如 500 Internal Server Error

HTTP 狀態碼與解決方法

1xx:資訊回應(暫時性狀態)

100 Continue

100 Continue

1xx 狀態碼雖然不常見,通常用於大型文件的處理或協議的切換,告訴用戶端「伺服器已經開始處理,請稍等」。

1. 100 Continue

發生原因:當用戶端發送大文件時,伺服器要求確認是否繼續上傳。

  • 排查步驟
    1. 確認伺服器是否正確實現了 100 Continue 的支持。
    2. 檢查用戶端是否正確發送了 Expect: 100-continue 標頭。
  • 解決方法
    1. 在伺服器上配置支持 100 Continue 的機制。
    2. 測試用戶端和伺服器的交互,確保協議兼容。

2. 101 Switching Protocols

伺服器應用於協議切換,例如從 HTTP 切換到 WebSocket。

  • 排查步驟
    1. 檢查用戶端是否正確設置了 Upgrade 標頭。
    2. 驗證伺服器是否支持請求的新協議(如 WebSocket)。
  • 解決方法
    1. 確保伺服器已安裝並啟用所需的協議模組。
    2. 測試升級過程是否按預期執行。

102 Processing(WebDAV)

用於 WebDAV 協議中處理複雜的請求(如多步驟操作)。

  • 排查步驟
    1. 確認伺服器支持 WebDAV 並正確處理多步驟請求。
    2. 測試用戶端是否正確處理了延遲回應。
  • 解決方法
    1. 優化伺服器性能以縮短處理時間。
    2. 在長時間操作前返回 102 Processing,保持用戶端知情。

103 Early Hints

代表需要加速頁面渲染的情況,例如預加載 CSS、JavaScript 或圖像。

  • 排查步驟
    1. 檢查伺服器是否正確返回 Link 標頭和資源路徑。
    2. 確認用戶端瀏覽器是否支持 103 Early Hints 並進行預加載。
  • 解決方法
    1. 在伺服器端配置 103 Early HintsLink 標頭,指定需要預加載的資源。
    2. 使用開發者工具檢查資源是否按預期被預加載,並根據需求優化資源順序。

2xx:成功(請求成功)

2xx:成功(請求成功)

2xx:成功(請求成功)

2xx 是最讓人滿意的狀態碼,因為它意味著請求成功並得到了預期的回應。

201 Created

請求成功,結果根據 HTTP 方法而異:

  • GET:資源成功檢索,並在訊息主體中傳送。
  • HEAD:僅包含標頭,無訊息主體。
  • PUT/POST:回應包含操作結果的詳細資訊。
  • TRACE:訊息主體返回伺服器接收到的請求。

排查步驟

  1. 確保伺服器正確處理請求並返回 200 OK
  2. 驗證用戶端是否成功解析伺服器回應。

解決方法

  1. 確保伺服器的回應資料與請求方法相符。
  2. 測試各種請求方法,檢查是否返回預期結果。

202 Accepted

適用於需要較長處理時間的操作,例如批處理或後續操作。

排查步驟

  1. 檢查伺服器是否記錄了請求,並安排後續處理。
  2. 確認用戶端是否預期到非同步處理。

解決方法

  1. 設置通知機制,告知用戶端處理完成的狀態。
  2. 確保伺服器能夠跟蹤和完成後續請求操作。

203 Non-Authoritative Information

使用快取或鏡像伺服器時。

排查步驟

  1. 驗證伺服器返回的資料來源是否正確。
  2. 檢查是否需要更新快取或備份資料。

解決方法

  1. 優化伺服器快取策略,確保數據更新及時。
  2. 在適用情境下,優先返回 200 OK 以表示直接來源。

204 No Content

請求成功,但無內容返回。例如刪除操作成功但無需返回內容。

排查步驟

  1. 驗證伺服器是否正確處理請求,且無需返回主體內容。
  2. 確認標頭資訊是否提供足夠的上下文。

解決方法

  1. 優化伺服器邏輯,在適當情況下返回 204 No Content
  2. 測試用戶端是否正確處理無內容回應。

205 Reset Content

伺服器指示用戶端重置當前的文檔或表單。表單清除後需要重置。

排查步驟

  1. 驗證伺服器回應是否觸發用戶端的重置操作。
  2. 確保用戶端能夠正確執行重置行為。

解決方法

  1. 配置伺服器返回 205 Reset Content,並記錄用戶端重置行為。
  2. 測試用戶端是否成功響應。

206 Partial Content

用戶端請求部分資源,伺服器成功返回範圍內的資料。如音視頻流或大文件下載分段。

排查步驟

  1. 檢查伺服器是否正確支持 Range 標頭。
  2. 驗證用戶端是否正確請求資源範圍。

解決方法

  1. 在伺服器啟用範圍請求支持,確保數據分段正確。
  2. 使用開發者工具測試資源的分段下載和播放。

207 Multi-Status (WebDAV)

用於傳遞多個資源的狀態資訊。在 WebDAV 操作中,對多個資源執行批量操作。

排查步驟

  1. 檢查伺服器是否返回了多個資源的狀態代碼。
  2. 驗證用戶端是否正確處理多狀態回應。

解決方法

  1. 優化伺服器邏輯以正確傳遞多狀態資訊。
  2. 測試用戶端對多狀態回應的兼容性。

208 Already Reported (WebDAV)

避免在多重綁定中重複列舉內部成員。適用於 WebDAV 場景的綁定管理。

排查步驟

  1. 確認伺服器是否正確避免重複列舉。
  2. 驗證用戶端是否正確解釋已報告的狀態。

解決方法

  1. 優化 WebDAV 伺服器以避免冗餘列舉。
  2. 確保多重綁定的狀態回應一致。

226 IM Used

伺服器應用了一個或多個操作於資源,並返回結果。增量編碼的情境下,用於提供差異內容。

排查步驟

  1. 檢查伺服器是否正確實施了增量編碼操作。
  2. 驗證用戶端是否支持並正確解釋增量回應。

解決方法

  1. 配置伺服器支持增量編碼,提升回應效率。
  2. 測試用戶端是否正確處理增量數據。

3xx:重定向(需進一步操作)

3xx:重定向

當你需要將用戶導向其他資源時,伺服器會返回 3xx 狀態碼,讓用戶端自動跳轉到新位置。

 

300 Multiple Choices

該請求有多個可能的回應,伺服器無法自行選擇具體的選項,需用戶端決定。多種語言版本的網站頁面,伺服器提供多個選擇。

  • 排查步驟
    1. 檢查是否提供了所有可用資源的鏈接。
    2. 驗證回應中的選項是否完整且清晰。
  • 解決方法
    1. 使用 HTML 鏈接提供用戶選擇。
    2. 優化自動選擇邏輯(例如根據地區或語言偏好)。

301 Moved Permanently

所請求的資源的 URL 已永久更改,新的 URL 在 Location 標頭中指定。網站結構調整或頁面永久搬遷。

  • 排查步驟
    1. 確認 Location 標頭是否正確指向新的 URL。
    2. 測試是否對舊 URL 的請求返回了正確的 301 狀態碼。
  • 解決方法
    1. 配置伺服器進行永久重定向。
    2. 更新站內和站外所有指向舊 URL 的連結。

302 Found

所請求的資源的 URI 已暫時更改,但用戶端應繼續使用舊 URI。臨時的頁面轉向(例如活動頁面)。

  • 排查步驟
    1. 驗證重定向邏輯是否正確。
    2. 確保回應中的 Location 標頭指向暫時的 URI。
  • 解決方法
    1. 使用伺服器配置臨時重定向。
    2. 為未來的穩定性,考慮設置過渡期限。

303 See Other

伺服器指示用戶端應以 GET 請求在另一個 URI 獲取資源。表單提交後的頁面重定向。

  • 排查步驟
    1. 確保表單提交後的重定向使用了 303 狀態碼。
    2. 驗證 Location 標頭的 URI 是否有效。
  • 解決方法
    1. 配置伺服器在表單提交後返回正確的 URI。
    2. 測試瀏覽器在重定向後的行為。

304 Not Modified

此狀態碼用於緩存目的,告訴用戶端其緩存的版本仍然有效。靜態資源(如圖片、CSS 文件)的版本控制。

  • 排查步驟
    1. 驗證請求中是否包含有效的 If-Modified-SinceETag 標頭。
    2. 確保伺服器正確處理緩存檢查邏輯。
  • 解決方法
    1. 設置正確的 HTTP 緩存控制標頭。
    2. 測試瀏覽器是否正確緩存資源。

305 Use Proxy(已棄用)

此狀態碼指示所請求的資源必須通過代理訪問,但已被 HTTP 標準棄用,因其存在安全問題。

  • 建議:避免使用此狀態碼,直接提供安全的代理設定文件。

306 unused

此狀態碼已棄用,僅保留作為占位符。

  • 建議:無需處理,確保伺服器不返回此狀態碼即可。

307 Temporary Redirect

伺服器指示用戶端以相同的請求方法(如 POST)在另一個 URI 獲取資源。臨時重定向且保留請求方法(如支付流程中間頁)。

  • 排查步驟
    1. 確保重定向的 URL 是暫時性的。
    2. 測試是否保留了請求方法。
  • 解決方法
    1. 配置伺服器返回 307 狀態碼和正確的 Location 標頭。
    2. 測試不同用戶代理對重定向的行為。

308 Permanent Redirect

資源永久移動到另一個 URI,並要求用戶端保留請求方法。長期使用的 API 接口升級。

  • 排查步驟
    1. 確保新的 URI 是永久有效的。
    2. 測試請求方法是否正確被保留。
  • 解決方法
    1. 設置伺服器返回 308 狀態碼。
    2. 更新所有可能影響的用戶端請求。

4xx:用戶端錯誤(請求問題)

4xx:用戶端錯誤

用戶端的請求有問題,可能是錯誤的網址、無權限訪問,或格式不正確。

 

400 Bad Request

伺服器無法處理請求,通常是因為錯誤的請求語法、無效的訊息框架或欺騙性的路由。用戶端未提供正確的請求格式。

  • 排查步驟
    1. 檢查請求 URL 和標頭的格式是否正確。
    2. 驗證請求體是否包含必要的參數或數據。
  • 解決方法
    1. 修復請求中的格式錯誤。
    2. 更新 API 文檔以確保用戶端的正確使用。

401 Unauthorized

用戶端未進行身份驗證,因此無法存取所請求的資源。用戶端未提供有效的身份驗證憑據。

  • 排查步驟
    1. 確認請求是否包含有效的身份驗證標頭(如 Authorization)。
    2. 驗證伺服器的身份驗證機制是否正常工作。
  • 解決方法
    1. 提供正確的身份驗證憑據。
    2. 使用 HTTPS 確保憑據傳輸的安全性。

403 Forbidden

用戶端沒有權限存取該資源,即使已通過身份驗證。伺服器禁止已知用戶存取某些資源。

  • 排查步驟
    1. 確認使用者是否具有必要的存取權限。
    2. 檢查伺服器配置文件中的存取控制列表(ACL)。
  • 解決方法
    1. 更新用戶的存取權限。
    2. 調整伺服器的資源訪問策略。

404 Not Found

伺服器找不到所請求的資源。這是最常見的 HTTP 狀態碼之一。用戶端請求了一個不存在的 URL。

  • 排查步驟
    1. 驗證請求的 URL 是否正確。
    2. 確保伺服器上的資源仍可用且未被刪除。
  • 解決方法
    1. 修正錯誤的 URL。
    2. 為已刪除的資源設置適當的重定向(如 301 或 410)。

405 Method Not Allowed

所請求的 HTTP 方法不被目標資源支援。例如嘗試對不支援 DELETE 的資源使用 DELETE 方法。

  • 排查步驟
    1. 確認伺服器支持的 HTTP 方法。
    2. 檢查 API 文檔以了解資源的可用方法。
  • 解決方法
    1. 改用支持的 HTTP 方法。
    2. 更新 API 以支援新方法。

406 Not Acceptable

伺服器無法提供符合用戶代理標準的內容。用戶端請求了不支持的內容類型。

  • 排查步驟
    1. 驗證請求標頭中的 Accept 是否正確。
    2. 確認伺服器是否支持所請求的內容格式。
  • 解決方法
    1. 調整用戶端的 Accept 標頭。
    2. 更新伺服器以提供兼容的內容。

408 Request Timeout

用戶端未在伺服器等待時間內完成請求。伺服器關閉了未使用的閒置連接。

  • 排查步驟
    1. 檢查伺服器的超時設置。
    2. 確認網絡是否正常。
  • 解決方法
    1. 增加伺服器的超時時間。
    2. 優化請求性能以減少延遲。

409 Conflict

用戶端的請求與伺服器當前的狀態衝突。嘗試更新的資源已被其他用戶修改。

  • 排查步驟
    1. 驗證資源的版本控制是否一致。
    2. 確認沒有其他用戶同時修改該資源。
  • 解決方法
    1. 提供用戶端解決衝突的選項。
    2. 使用版本控制系統處理多用戶的操作。

410 Gone

資源已永久刪除且無法訪問。舊頁面被刪除且沒有替代頁面。

  • 排查步驟
    1. 確認資源是否被永久刪除。
    2. 確認沒有其他用戶仍在訪問該資源。
  • 解決方法
    1. 更新站內的所有連結以避免指向刪除的資源。
    2. 提供用戶有用的替代內容。

429 Too Many Requests

用戶端在給定時間內發送了過多的請求。API 的速率限制超過了伺服器的配置。

  • 排查步驟
    1. 檢查伺服器是否正確實現速率限制。
    2. 確認用戶端的請求頻率是否超出限制。
  • 解決方法
    1. 改善用戶端請求模式以遵守速率限制。
    2. 在伺服器端返回適當的 Retry-After 標頭,指示用戶端何時可以重試。

 

5xx:伺服器錯誤(伺服器問題)

5xx:伺服器錯誤

當伺服器因內部問題無法完成請求時,會返回 5xx 狀態碼。這類錯誤通常需要伺服器管理員介入解決。像是廚房炸裂或是主廚離職因此無法準備餐點「抱歉,我們無法準備你的餐點。」

500 Internal Server Error

伺服器發生未知錯誤,無法完成請求。

  • 原因:
    1. 伺服器內部程式碼錯誤。
    2. 未預期的情況(例如資源過載)。
  • 排查步驟:
    1. 檢查伺服器日誌,尋找具體錯誤信息。
    2. 確認後端程式是否存在錯誤或未處理的例外情況。
    3. 測試伺服器的資源使用情況,例如內存或硬碟是否已滿。

501 Not Implemented

伺服器不支援所請求的方法,無法執行。

  • 原因:
    1. 使用的 HTTP 方法(例如 DELETE 或 PATCH)未在伺服器中啟用。
  • 排查步驟:
    1. 確認伺服器是否支援該方法(至少應支援 GET 和 HEAD)。
    2. 更新伺服器配置,啟用必要的方法。

502 Bad Gateway

伺服器作為閘道器,收到無效的回應。

  • 原因:
    1. 伺服器上游服務無法正常運行。
    2. 網路連接問題或伺服器間的通信失敗。
  • 排查步驟:
    1. 確認上游伺服器是否正常工作。
    2. 測試伺服器之間的連接是否正常。
    3. 驗證反向代理或負載平衡器的配置。

503 Service Unavailable

伺服器暫時無法處理請求(維護或負載過重)。

  • 原因:
    1. 伺服器過載。
    2. 正在進行維護操作。
  • 排查步驟:
    1. 檢查伺服器資源使用率(CPU、RAM)。
    2. 確保伺服器配置了「Retry-After」標頭,以指示何時恢復服務。
    3. 提供一個友好的維護頁面,告知用戶情況。

504 Gateway Timeout

伺服器作為閘道器,等待上游伺服器回應時超時。

  • 原因:
    1. 上游伺服器響應緩慢。
    2. 伺服器間的連接中斷。
  • 排查步驟:
    1. 確認上游伺服器的健康狀態。
    2. 增加伺服器的連接超時時間配置。
    3. 優化上游伺服器的處理速度。

505 HTTP Version Not Supported

伺服器不支援所請求的 HTTP 協議版本。

  • 原因:
    1. 使用的 HTTP 協議版本(如 HTTP/1.0)過時。
  • 排查步驟:
    1. 檢查用戶端的 HTTP 請求頭,確認所用版本。
    2. 確保伺服器配置支援常見的 HTTP 協議版本(如 HTTP/1.1 或 HTTP/2)。

506 Variant Also Negotiates

伺服器的內容協商配置有問題,無法確定適合的資源變體。

  • 原因:
    1. 配置錯誤導致資源無法選定合適的版本。
  • 排查步驟:
    1. 檢查伺服器的內容協商配置。
    2. 確認變體資源的優先級配置是否正確。

507 Insufficient Storage(WebDAV)

伺服器存儲空間不足,無法處理請求。

  • 原因:
    1. 伺服器硬碟或分區空間不足。
  • 排查步驟:
    1. 確認伺服器的可用硬碟空間。
    2. 清理不必要的檔案或升級存儲空間。

508 Loop Detected(WebDAV)

請求中檢測到無限循環。

  • 原因:
    1. 資源配置或代碼邏輯中存在無限遞歸。
  • 排查步驟:
    1. 檢查伺服器配置中是否存在重複引用的資源。
    2. 優化代碼以防止循環邏輯。

510 Not Extended

伺服器需要額外資訊來完成請求。

  • 原因:
    1. 請求中缺少伺服器要求的擴展。
  • 排查步驟:
    1. 確認伺服器需要的擴展協議。
    2. 更新用戶端請求以包括必要資訊。

511 Network Authentication Required

用戶端需要進行身份驗證才能獲取網路訪問。

  • 原因:
    1. 使用的網路需要進行驗證(例如公共 Wi-Fi 的登入頁面)。
  • 排查步驟:
    1. 檢查用戶端是否需要訪問登入頁面。
    2. 確認伺服器網路驗證的配置是否正常。

如何學習與了解 HTTP 狀態碼?

1. 理解狀態碼的作用

每個狀態碼都描述了一個特定的請求回應情況,例如用戶的瀏覽行為(4xx)或伺服器的處理邏輯(5xx)。

2. 參考官方資源與工具

官方文檔:

MDN HTTP 狀態碼

IETF HTTP 規範

線上工具:

Google Search Console

Redirect Checker

3. 實際操作與檢測

使用開發者工具或線上工具測試各種狀態碼的行為。

結論:掌握 HTTP 狀態碼,提升網站性能!

熟悉 HTTP 狀態碼不僅能幫助網站快速排查錯誤,還能優化用戶體驗與 SEO 表現。所以無論是排查錯誤還是進行網站優化,熟悉 HTTP 狀態碼可以說是必備技能。

如果你本身沒有程式設計的背景,或是你需要設計一個功能強大、結構清晰的網站,可以聯繫專業的網站設計公司,像是我們的專業團隊,可以輕鬆協助你架設一個符合SEO整體的網站架構!

👉 現在就聯繫我們,掌握更多網站設計與優化技巧! 🚀

歡迎你在下方訂閱我們的部落格,我們將於每周發送與網站架設相關的最新知識!感謝你的閱讀!

訂閱洞察,獲取更多知識文章

GET BETTER RESULTS BY UPGRADING TODAY!​