Skip to content
ADP
API Design PrincipleBETA

[ADP-200] HTTP 狀態碼

reviewing phase 1

  • 重新審視是否文件化標準
  • 加入關聯ADP連結

HTTP 狀態碼是標準化的代碼,用於表示 HTTP 請求的結果。這些代碼分為五類:

  1. 1xx (資訊性): 請求已收到,處理過程正在繼續。
  2. 2xx (成功): 請求已成功接收、理解並接受。
  3. 3xx (重定向): 需要採取進一步行動才能完成請求。
  4. 4xx (客戶端錯誤): 請求包含錯誤的語法或無法實現。
  5. 5xx (伺服器錯誤): 伺服器無法實現有效請求。

HTTP 狀態碼使用情況

代碼描述使用文件
成功代碼
200OK使用記錄所有
201Created使用記錄 POST, PUT
202Accepted使用記錄 POST, PUT, PATCH, DELETE
204No Content使用記錄 POST, PUT, PATCH, DELETE
205Reset Content不使用所有
206Partial Content不用於分頁所有
207Multi-Status使用記錄 POST (DELETE)
重定向代碼
301Moved Permanently不使用所有
302Found不使用所有
303See Other不使用POST, PUT, PATCH, DELETE
304Not Modified記錄GET, HEAD
307Temporary Redirect不使用所有
308Permanent Redirect不使用所有
客戶端錯誤代碼
400Bad Request使用記錄所有
401Unauthorized使用不記錄所有
403Forbidden不記錄所有
404Not Found使用不記錄所有
405Method Not Allowed記錄所有
406Not Acceptable使用不記錄所有
407Proxy Authentication Required不使用所有
408Request Timeout不使用所有
409Conflict記錄POST, PUT, PATCH, DELETE
410Gone不記錄所有
411Length Required記錄POST, PUT, PATCH
412Precondition Failed使用不記錄 PUT, PATCH, DELETE
413Payload Too Large使用所有
415Unsupported Media Type使用不記錄 POST, PUT, PATCH
417Expectation Failed不使用所有
418I'm a Teapot不使用所有
422Unprocessable Content不使用所有
423Locked記錄PUT, PATCH, DELETE
424Failed Dependency不使用所有
428Precondition Required使用不記錄所有
429Too Many Requests使用不記錄所有
431Request Header Fields Too Large不記錄所有
伺服器端錯誤代碼
500Internal Server Error使用不記錄所有
501Not Implemented記錄所有
502Bad Gateway無意義
503Service Unavailable使用不記錄所有
504Gateway Timeout使用所有
505HTTP Version Not Supported不使用所有
507Insufficient Storage不記錄POST, PUT, PATCH
511Network Authentication Required不使用所有

圖例:

  • 使用: 常見且易於理解的狀態碼,應在適當情況下使用。這並不意味著每個操作都必須返回此代碼。
  • 不使用: 該狀態碼被認為不適合從 RESTful API 返回。它可能適用於其他情況,例如由反向代理返回或用於網頁。
  • 記錄: 如果 API 可能返回該狀態碼,應在 API 規範中記錄。
  • 不記錄: 該狀態碼具有公認的標準含義,因此只有在有特定於操作的細節需要添加時才應記錄。

HTTP 狀態碼 - 使用指南

代碼描述何時使用不使用的原因(如適用)
成功代碼
200OK標準成功回應。當請求成功且有回應主體時使用。
201Created當成功創建資源時使用。返回創建的資源或設置帶有新資源 URI 的 Location 標頭。
202Accepted當請求已被接受處理,但處理尚未完成時使用。適用於異步操作。
204No Content當請求成功但沒有回應主體時使用(例如,成功的 DELETE 或 PUT 請求)。
205Reset Content用於交互式用例,如清除表單。在 REST API 中沒有理由使用。
206Partial Content用於回應範圍請求,僅返回由字節範圍指示的資源的一部分。不用於分頁,分頁應使用正常的 200。在罕見情況下可能有用,但大多數 API 不需要。
207Multi-Status用於批量或批處理請求,其中回應包含多個部分的狀態。通常與 POST 或 DELETE 一起使用。
重定向代碼
301Moved Permanently此請求和所有未來請求應定向到給定的 URI。不建議用於 API,因為通常不使用重定向代碼。
302Found臨時重定向;某些客戶端可能會將方法從 POST 更改為 GET。主要用於在瀏覽器中取消和重定向表單提交。不建議用於 API。
303See Other表示可以使用 GET 方法在另一個 URI 下找到回應。不建議用於 API。原始設計用於 API 中的長時間運行任務。但我們已經使用 202 + Location 替代它,請參見 ../HTTP%20Semantics%209242628693f84e209daf705d397c27db/%5BADP-357%5D%20Long%20running%20job%20e6872e32e7824847b778f11b7fd373db.md。
304Not Modified用於條件 GET 或 HEAD 請求,其中自提供的日期或版本以來資源未被修改。
307Temporary Redirect表示資源暫時位於另一個 URI,保持相同的方法。不建議用於 API。
308Permanent Redirect表示資源永久位於另一個 URI,保持相同的方法。不建議用於 API。
客戶端錯誤代碼
400Bad Request用於語法不正確或格式錯誤的請求。
401Unauthorized當需要身份驗證且身份驗證失敗或尚未提供時使用。通常意味著"未經身份驗證"。應引用通用組件.responses.UnauthorizedError
403Forbidden當客戶端沒有訪問資源的權限時使用。只記錄特定情況。
404Not Found當找不到請求的資源時使用。應引用通用組件.responses.NotFoundError
405Method Not Allowed當使用的 HTTP 方法不允許用於該資源時使用。
406Not Acceptable當請求的資源只能生成不符合請求中發送的 Accept 標頭的內容時使用。
407Proxy Authentication Failed在 API 中很少使用
408Request Timeout伺服器等待請求時超時。不應用於 API。
409Conflict當由於與資源當前狀態衝突而無法處理請求時使用。
410Gone當請求的資源不再可用且將來也不會可用時使用。
411Length Required當伺服器要求請求中包含 Content-Length 標頭時使用。
412Precondition Failed用於條件請求,其中不滿足前提條件。通常與 If-Match 一起用於樂觀鎖定。
413Payload Too Large請求標頭或主體超過定義的限制。這可能發生在包含許多範圍的大型 JWT 或大型 HTTP 主體中。
415Unsupported Media Type當伺服器不支持請求數據的媒體格式時使用。
417Expectation Failed客戶端使用了伺服器不支持的 Expect 標頭。
418I'm a Teapot在 RFC 2324 中定義為玩笑。
422Unprocessable Entity伺服器理解內容類型但無法處理內容。400 涵蓋了大多數用例,沒有明確的區分優勢。
423Locked當資源被鎖定且無法訪問時使用。通常用於悲觀鎖定。
424Failed Dependency由於先前請求失敗而導致請求失敗。不適用於 RESTful API。通常用於 WebDAV。
428Precondition Required當伺服器要求請求為條件請求時使用,以防止"丟失更新"問題。
429Too Many Requests當客戶端在給定時間內發送了太多請求時使用("速率限制")。
431Request Header Fields Too Large伺服器無法處理請求,因為請求標頭太大。
伺服器端錯誤代碼
500Internal Server Error用於伺服器遇到意外情況時的通用伺服器錯誤。
501Not Implemented當伺服器不支持實現請求所需的功能時使用。
502Bad Gateway伺服器從入站伺服器收到無效回應。
503Service Unavailable當伺服器未準備好處理請求時使用,通常是由於維護或過載。客戶端重試可能是合理的。
504Gateway Timeout當伺服器作為網關或代理時,未能及時從上游伺服器接收回應時使用。
505HTTP Version Not Supported伺服器不支持請求中使用的 HTTP 協議版本。
507Insufficient Storage伺服器無法按需要存儲資源以完成請求。為 WebDAV 設計,見 https://datatracker.ietf.org/doc/html/rfc4918#section-11.5
511Network Authentication Required客戶端需要進行身份驗證以獲得網絡訪問權限。

INFO

💡 關於 4xx 和 5xx 回應詳情,請參見錯誤設計

參考

設計參考