HTTP 狀態碼列表
面向開發者的 HTTP 狀態碼(1xx-5xx)完整列表,包含含義、常見原因和解決方法。內建查詢工具——輸入程式碼即可立即檢視詳情。
| 程式碼 | 名稱 | 含義 | 常見原因 |
|---|---|---|---|
| 1xx — 資訊性響應 | |||
| 100 | Continue (Continue) | 表示伺服器已收到請求的初始部分,客戶端應繼續傳送其餘內容。 | 當客戶端在傳送較大的請求體之前傳送 Expect: 100-continue 請求頭時返回。 |
| 101 | Switching Protocols (Switching Protocols) | 表示伺服器接受 Upgrade 請求頭的要求,正在切換到另一種協議。 | 建立 WebSocket 連線時常見的正常響應。 |
| 102 | Processing (Processing) | 表示伺服器已接受請求但仍在處理中,尚無響應可返回(WebDAV)。 | 用於在長時間執行的 WebDAV 操作中避免超時。 |
| 103 | Early Hints (Early Hints) | 在最終響應之前傳送 Link 等預備響應頭,讓瀏覽器可以預載入資源。 | 由 CDN 或反向代理新增,用於加速 CSS/JS 的預載入。 |
| 2xx — 成功 | |||
| 200 | OK (OK) | 最常見的成功響應,表示請求已被成功處理。 | |
| 201 | Created (Created) | 表示請求導致新資源被建立。 | 由通過 POST 建立資源的 API 返回,通常包含指向新資源的 Location 響應頭。 |
| 202 | Accepted (Accepted) | 表示請求已被接受,但處理尚未完成(非同步處理)。 | 用於僅將任務加入佇列的非同步 API,或批處理接收端點。 |
| 204 | No Content (No Content) | 表示請求成功,但沒有內容可返回。 | 常見於 DELETE 成功後,或 API 設計中省略響應體的 PUT 更新。 |
| 206 | Partial Content (Partial Content) | 表示根據客戶端的 Range 請求頭,只返回了資源的一部分。 | 影片拖動播放或斷點續傳下載時的正常響應。 |
| 3xx — 重定向 | |||
| 301 | Moved Permanently (Moved Permanently) | 表示資源已永久移動到新的 URL;搜尋引擎會將排名訊號轉移到新 URL。 | 用於 URL 結構變更或域名遷移後重定向舊 URL。 |
| 302 | Found (Found) | 表示資源暫時位於另一個 URL。永久性移動應改用 301。 | 常用於維護期間的臨時路由,或登入後的重定向。 |
| 303 | See Other (See Other) | 表示應使用 GET 方法從另一個 URL 獲取結果(Post-Redirect-Get 模式)。 | 用於表單提交(POST)之後,以避免瀏覽器的重複提交提示。 |
| 304 | Not Modified (Not Modified) | 表示快取的資源未發生變化,因此不會重新發送響應體。 | 在快取仍然有效時,針對使用 If-None-Match / If-Modified-Since 的條件請求返回。 |
| 307 | Temporary Redirect (Temporary Redirect) | 一種臨時重定向,與 302 不同,重新發送時會保留原始的方法和請求體。 | 用於需要重定向 POST/PUT 請求同時保留請求體的 API 設計。 |
| 308 | Permanent Redirect (Permanent Redirect) | 一種永久重定向,與 301 不同,重新發送時會保留原始的方法和請求體。 | 用於需要永久遷移同時保留請求方法的 API 版本遷移。 |
| 4xx — 客戶端錯誤 | |||
| 400 | Bad Request (Bad Request) | 表示請求的語法或引數格式有誤,伺服器無法理解。 | 通常由 JSON 語法錯誤、缺少必需引數或型別不匹配引起。 |
| 401 | Unauthorized (Unauthorized) | 表示缺少或提供了無效的身份驗證憑據(儘管名稱如此,實際含義是「未認證」)。 | 常見原因包括令牌過期、缺少 Authorization 請求頭或 API 金鑰錯誤。 |
| 402 | Payment Required (Payment Required) | 保留供未來使用,有時用於表示需要付款。 | 一些 API 會借用此狀態碼來表示超出使用限額或計費方案已過期。 |
| 403 | Forbidden (Forbidden) | 表示伺服器理解請求,但拒絕授權執行該請求。 | 常見原因包括許可權不足、IP 限制、違反 CORS 策略或檔案許可權配置錯誤。 |
| 404 | Not Found (Not Found) | 表示未能找到請求的資源。 | 通常由未註冊的路由、URL 拼寫錯誤或訪問已被刪除的資源引起。 |
| 405 | Method Not Allowed (Method Not Allowed) | 表示資源存在,但不允許使用指定的 HTTP 方法訪問它。 | 常見於向僅支援 GET 的端點發送 POST 請求,或類似的方法不匹配情況。 |
| 406 | Not Acceptable (Not Acceptable) | 表示伺服器無法生成符合客戶端 Accept 請求頭要求的響應。 | 例如客戶端請求 Accept: application/xml,而 API 只能返回 JSON 時發生。 |
| 408 | Request Timeout (Request Timeout) | 表示伺服器等待客戶端完成請求時超時。 | 常由網路連線緩慢、上傳檔案較大或客戶端在請求中途卡住引起。 |
| 409 | Conflict (Conflict) | 表示請求與資源的當前狀態存在衝突。 | 常見於併發編輯時的樂觀鎖衝突,或嘗試建立重複資源。 |
| 410 | Gone (Gone) | 表示資源已被永久移除且不會再恢復(比 404 更強烈的訊號)。 | 用於明確告知搜尋引擎內容已被有意刪除並下線。 |
| 413 | Payload Too Large (Payload Too Large) | 表示請求體的大小超過了伺服器願意接受的限制。 | 通常由超出檔案上傳大小限制,或 Nginx/PHP 中請求體大小設定不足引起。 |
| 414 | URI Too Long (URI Too Long) | 表示請求的 URI 長度超過了伺服器願意處理的限制。 | 常見於將大量資料塞入 GET 查詢引數中的情況。 |
| 415 | Unsupported Media Type (Unsupported Media Type) | 表示伺服器不支援請求體所使用的媒體型別。 | 常見於向 JSON API 傳送 Content-Type: text/plain,或類似的請求頭配置錯誤。 |
| 422 | Unprocessable Entity (Unprocessable Entity) | 表示請求語法正確,但語義驗證失敗。 | 常用於報告表單驗證錯誤,例如缺少必填欄位或格式不正確。 |
| 425 | Too Early (Too Early) | 表示伺服器拒絕處理可能因早期資料風險而被重放的請求。 | 可作為針對使用 TLS 1.3 0-RTT 資料的重放攻擊的防禦手段而返回。 |
| 429 | Too Many Requests (Too Many Requests) | 表示客戶端在給定時間視窗內傳送了過多請求(速率限制)。 | 由超出 API 速率限制引起;Retry-After 響應頭通常會指示重試前需等待的時間。 |
| 451 | Unavailable For Legal Reasons (Unavailable For Legal Reasons) | 表示內容因法律要求(如法院命令)而無法提供。 | 當內容提供方因版權申訴或特定國家/地區的法律法規而遮蔽訪問時返回。 |
| 5xx — 伺服器錯誤 | |||
| 500 | Internal Server Error (Internal Server Error) | 表示伺服器發生了意外錯誤,無法處理該請求。 | 原因多種多樣:應用程式中未處理的異常、配置錯誤、資料庫連線失敗等等。 |
| 501 | Not Implemented (Not Implemented) | 表示伺服器不支援完成該請求所需的功能。 | 常見於向較舊的伺服器實現傳送尚未實現的 HTTP 方法(如 PATCH)時發生。 |
| 502 | Bad Gateway (Bad Gateway) | 表示代理或閘道器從上游伺服器收到了無效的響應。 | 通常由上游應用伺服器宕機或崩潰引起。 |
| 503 | Service Unavailable (Service Unavailable) | 表示伺服器暫時過載或正在維護,無法處理請求。 | 主要由高負載下的資源耗盡,或計劃中的維護視窗引起。 |
| 504 | Gateway Timeout (Gateway Timeout) | 表示代理或閘道器未能及時收到上游伺服器的響應。 | 常由後端處理耗時過長、網路延遲或上游伺服器掛起引起。 |
| 505 | HTTP Version Not Supported (HTTP Version Not Supported) | 表示伺服器不支援請求中使用的 HTTP 版本。 | 常見於舊客戶端或配置錯誤的代理使用了非預期的 HTTP 版本進行通訊時發生。 |
| 507 | Insufficient Storage (Insufficient Storage) | 表示伺服器沒有足夠的儲存空間來完成請求(WebDAV)。 | 當檔案儲存操作因磁碟空間不足而失敗時返回。 |
| 508 | Loop Detected (Loop Detected) | 表示伺服器在處理請求時檢測到了無限迴圈(WebDAV)。 | 常見於 WebDAV 繫結配置中存在迴圈引用的情況。 |
| 511 | Network Authentication Required (Network Authentication Required) | 表示客戶端需要進行身份驗證才能獲得網路訪問許可權。 | 用於重定向到強制門戶登入頁面,例如公共 Wi-Fi 場景。 |
使用提示
- 404 和 410 看起來相似,但 410 明確表示內容是被有意刪除且不會再恢復的。對於沒有替代內容的頁面,使用 410 可以向搜尋引擎發出更清晰的訊號。
- 301 與 308、302 與 307 分別共享「永久 vs 臨時」的區別,但 308 和 307 在重新發送時會保留原始的 POST 請求體,這一點與 301 和 302 不同。
- 收到 429 Too Many Requests 時,請檢查
Retry-After響應頭,並等待相應時間後再重試——強行持續請求可能導致完全被封禁。 - 5xx 錯誤表示伺服器端出現了問題,而不是你的請求本身有誤——在排查客戶端程式碼之前,應先檢查伺服器日誌和執行狀態。
- 瀏覽器開發者工具的「網路」(Network)面板會為每個請求的狀態碼標註顏色。結合本表使用可以大幅提升除錯效率。
常見問題
-i 引數,或將程式碼輸入本頁面的查詢工具來檢視其含義。
閒話 ― HTTP 狀態碼簡史
HTTP 狀態碼體系最早在 1996 年釋出的 HTTP/1.0 規範 RFC 1945 中被標準化,隨後 1999 年釋出的 HTTP/1.1(RFC 2616)確立了我們今天所使用的大部分程式碼體系,包括 4xx 和 5xx 系列,此後又經過 RFC 7231(2014 年)和 RFC 9110(2022 年)的延續和更新。也就是說,我們每天在瀏覽器控制台裡看到的這些三位數字,其實是一套歷經近三十年不斷打磨、逐步沉澱下來的協議約定。
這套體系裡也藏著不少有趣的小插曲。最廣為人知的莫過於 418 I'm a teapot——它出自 1998 年愚人節的一份 RFC 文件,其中虛構了一套「超文本咖啡壺控制協議」(HTCPCP):如果你讓一個茶壺去煮咖啡,它自然只能返回這個哭笑不得的狀態碼。這個玩笑後來被不少框架和開發者社群當作彩蛋保留了下來,反倒成了 HTTP 狀態碼裡最容易被記住的一個。
「用首位數字表示大類」這一設計理念看似簡單,卻影響深遠——1xx 表示資訊性響應、2xx 表示成功、3xx 表示重定向、4xx 表示客戶端錯誤、5xx 表示伺服器錯誤,這種一目瞭然的分類方式近三十年來基本沒有改變,據說也啟發了後來 SMTP、FTP 等協議設計各自的返回碼體系。有趣的是,這套體系仍在持續生長:451 Unavailable For Legal Reasons 就是相對較新的成員,於 2015 年在 RFC 7725 中才被正式標準化,而數字 451 是刻意選定的,用以致敬雷·布拉德伯裡(Ray Bradbury)那部以審查制度為主題的反烏托邦小說《華氏 451 度》(Fahrenheit 451)——一個技術規範裡罕見的文學彩蛋。