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