每個 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 協議版本。 |