每個 HTTP 響應都附帶一個狀態碼,以明確的數字信息表明請求的處理方式。
HTTP 狀態碼是從服務器發送給客戶端的 HTTP 響應的首行。
如果您想知道服務器為什麼發送了特定的狀態碼以及它的含義,或者如果您正在構建服務器並且正在尋找要返回的完美的狀態碼,這個列表將非常有用。
狀態碼由 3 位數字和一個簡短的描述組成。
數字的第一位確定了響應組。
共有五個組:
- 1xx:信息性響應 - 表示請求已接收且已被理解
- 2xx:成功的響應 - 表示客戶端發出的請求已被接收、理解和接受
- 3xx:重定向 - 表示客戶端必須採取其他操作才能完成請求
- 4xx:客戶端錯誤 - 表示發生了客戶端引起的錯誤
- 5xx:服務器錯誤 - 表示發生了服務器上的錯誤
在本文的其餘部分中,我列出了所有有用的狀態碼。
(我刪除了一些特定於技術的狀態碼,例如 WebDAV 和很少使用的狀態碼)
信息性響應
| 狀態碼 | 描述 | 
|---|---|
| 100 Continue | 服務器已收到請求標頭,客戶端應繼續發送請求正文(例如,POST 請求)。 | 
| 在請求被拒絕適用於不適當的標頭之後,將大的請求正文發送到服務器可能是低效的。 | |
| 要求服務器檢查請求的標頭,客戶端必須在初始請求中作為標頭發送 Expect: 100-continue,並在接收到 100 Continue 狀態碼的響應後再發送正文。 | |
| 如果客戶端收到 403(Forbidden)或 405(Method Not Allowed)等錯誤碼,那麼它就不應該發送請求的正文。 | |
| 回應 417 Expectation Failed 表示應該重複請求,而不使用 Expect 標頭,因為它表示服務器不支持期望(對於 HTTP/1.0 服務器來說就是這種情況)。 | |
| 101 Switching Protocols | 客戶端要求服務器切換協議,服務器已同意切換。參見 RFC 7231 #6.2.2 | 
成功的響應
| 狀態碼 | 描述 | 
|---|---|
| 200 OK | 標準的成功 HTTP 請求響應。 | 
| 201 Created | 通常是對 POST 請求的回應。請求已完成,並創建了新的資源。 | 
| 202 Accepted | 請求已被接受處理。對實際處理以及結果沒有具體要求,可能發生在另一個服務器上或批量處理。 | 
| 203 Non-Authoritative Information | 原始服務器返回了 200,並且位於客戶端和服務器之間的轉換代理更改了有效負載。 | 
| 204 No Content | 服務器成功處理了請求,但沒有返回任何內容。 | 
| 205 Reset Content | 服務器成功處理了請求,但沒有返回任何內容。類似於 204 響應,但服務器要求客戶端重置文檔視圖(例如用於清除表單) | 
| 206 Partial Content | 根據客戶端發送的 Range 請求,服務器發送部分內容的響應。參見 RFC 7233 #4.1 | 
重定向
| 狀態碼 | 描述 | 
|---|---|
| 301 Moved Permanently | 所有未來的請求都應重定向到給定的 URI。只能在 GET/HEAD 請求中使用,對於其他所有方法都應使用 308 Permanent Redirect | 
| 302 Found | 資源暫時移至由 Location頭字段指定的 URL。只能在 GET/HEAD 請求中使用,對於其他所有方法都應使用307 Temporary Redirect | 
| 303 See Other | 在 POST 或 PUT 請求之後,指向存取新的 GET 請求中 Location頭字段中的確認消息。 | 
| 304 Not Modified | 當客戶端使用 If-Modified-Since或If-None-Match的請求標頭時,此響應狀態碼表示資源未被修改。 | 
| 307 Temporary Redirect | 類似於 302請求,但不允許更改 HTTP 方法 | 
| 308 Permanent Redirect | 類似於 301請求,但不允許更改 HTTP 方法 | 
客戶端錯誤
| 狀態碼 | 描述 | 
|---|---|
| 400 Bad Request | 由於客戶端產生了請求錯誤,服務器無法處理請求。錯誤可能包括請求格式錯誤、超出處理能力的尺寸,或其他錯誤。 | 
| 401 Unauthorized | 需要身份驗證,但客戶端未經授權 | 
| 403 Forbidden | 由於各種原因,資源不可用。如果原因是身份驗證,請使用 401 Unauthorized狀態碼。 | 
| 404 Not Found | 找不到請求的資源。 | 
| 405 Method Not Allowed | 該資源不允許使用該 HTTP 方法,但可能允許使用其他方法。 | 
| 406 Not Acceptable | 客戶端傳遞了不與服務器兼容的 Accept 標頭值。 | 
| 407 Proxy Authentication Required | 在客戶端和服務器之間存在需要身份驗證的代理。 | 
| 408 Request Timeout | 服務器等待請求超時。 | 
| 409 Conflict | 表示由於資源的當前狀態存在衝突(例如多個同時更新之間的編輯衝突),無法處理請求。 | 
| 410 Gone | 該資源不再可用,並且不會再次可用。比 404 更強大,例如搜索引擎將其解釋為從其索引中刪除該資源的提示。 | 
| 411 Length Required | 客戶端需要在請求中添加 Content-Length 標頭,這是必需的。 | 
| 412 Precondition Failed | 如果客戶端發送了 If-Unmodified-Since或If-None-Match請求標頭,並且服務器無法滿足該條件,則返回此響應。 | 
| 413 Payload Too Large | 請求超出服務器願意或能夠處理的大小限制。 | 
| 414 URI Too Long | 提供的 URI 長度超過了服務器的處理能力。 | 
| 415 Unsupported Media Type | 請求實體具有服務器或資源不支持的媒體類型。 | 
| 416 Range Not Satisfiable | 客戶端使用 Range 標頭請求文件的一部分,但服務器無法提供該部分。 | 
| 417 Expectation Failed | 服務器無法滿足期望的請求標頭的要求。 | 
| 421 Misdirected Request | 請求定向到無法生成響應的服務器(例如因為連接重用的緣故)。 | 
| 426 Upgrade Required | 客戶端應切換到另一種協議,如 Upgrade 標頭字段中指定的 TLS/1.0。 | 
| 428 Precondition Required | 服務器要求請求包含 If-Match 標頭。 | 
| 429 Too Many Requests | 用戶在給定時間內發送了太多的請求。用於速率限制。 | 
| 431 Request Header Fields Too Large | 由於一個或多個標頭或整個標頭集太大,無法滿足請求。 | 
| 451 Unavailable For Legal Reasons | 由於法律原因,該資源無法使用 | 
服務器錯誤
| 狀態碼 | 描述 | 
|---|---|
| 500 Internal Server Error | 通用的服務器錯誤消息,當遇到意外情況且沒有更具體的消息適合時給出。 | 
| 501 Not Implemented | 服務器不識別請求方法,或者無法滿足請求。 | 
| 502 Bad Gateway | 服務器充當網關或代理,並從上游服務器接收到無效響應。 | 
| 503 Service Unavailable | 服務器目前暫時無法提供服務(因為超負荷或正在進行維護)。 | 
| 504 Gateway Timeout | 服務器充當網關或代理,未及時從上游服務器接收到響應。 | 
| 505 HTTP Version Not Supported | 服務器不支持請求中指定的 HTTP 協議版本。 |