HTTP狀態代碼由IETF在RFC 9110中定義、由IANA統一維護註冊表。阿里雲OpenAPI通常遵循該規範。
阿里雲OpenAPI的狀態代碼約定
阿里雲OpenAPI通常遵循本文描述的HTTP狀態代碼規範:以2xx表示調用成功,以4xx表示調用方問題(參數不合法、身份認證失敗、許可權不足、超出配額等),以5xx表示服務端問題。調用出錯時,響應體中一般還會給出Code與Message欄位提供更細粒度的錯誤資訊,以及用於唯一標識本次調用的RequestId。
狀態代碼的具體語義和觸發條件可能因雲產品而異。調用OpenAPI時,請以該產品當前的 API 參考文檔為準。
狀態代碼的構成與分類
狀態代碼是一個三位整數,用於描述請求的處理結果和響應的語義。有效取值範圍是100~599。首位元字定義響應的類別,後兩位不承擔分類作用。
類別 | 含義 |
1xx(資訊性) | 請求已收到,處理繼續進行。這是臨時響應,一次請求可以先收到零個或多個1xx響應,之後才收到唯一的最終響應。 |
2xx(成功) | 請求已被成功接收、理解並接受。 |
3xx(重新導向) | 需要用戶端採取進一步操作才能完成請求。 |
4xx(用戶端錯誤) | 請求存在文法問題或無法被滿足,問題通常出在調用方。 |
5xx(服務端錯誤) | 服務端未能完成一個表面上有效請求,問題出在服務端。 |
狀態代碼明細
下表按類別列出各狀態代碼的標準語義,以及定義該狀態代碼的標準文檔。
1xx 資訊性響應
1xx響應在首部區結束時即終止,不能攜帶響應體。由於HTTP/1.0未定義1xx,服務端不得向HTTP/1.0用戶端發送1xx響應。
狀態代碼 | 標準名稱 | 含義 | 定義來源 |
100 | Continue | 繼續。請求的起始部分已被接收且尚未被拒絕,服務端願意接收請求體。用戶端應繼續發送請求體,並丟棄該臨時響應。 | RFC 9110 |
101 | Switching Protocols | 切換協議。服務端同意用戶端通過Upgrade首部提出的協議切換請求,並在響應中用Upgrade首部指明切換後生效的協議。 | RFC 9110 |
102 | Processing | 處理中。WebDAV擴充定義,現已廢棄,不建議在新設計中使用。 | RFC 2518 |
103 | Early Hints | 早期提示。在最終響應之前先返回部分首部(通常是Link),供用戶端提前預先載入資源。 | RFC 8297 |
2xx 成功
狀態代碼 | 標準名稱 | 含義 | 定義來源 |
200 | OK | 成功。請求已成功處理,響應體的內容取決於要求方法:GET返回目標資源的表示,POST返回操作狀態或結果,PUT和DELETE返回操作狀態,OPTIONS返回目標資源的通訊選項。 | RFC 9110 |
201 | Created | 已建立。請求已完成,並建立了一個或多個新資源。主資源由響應的Location首部標識;未返回Location時,即為請求的目標URI。 | RFC 9110 |
202 | Accepted | 已接受。請求已被接受處理,但處理尚未完成,最終也可能不被執行。HTTP沒有為非同步作業補髮狀態碼的機制,因此響應體通常會指向一個可查詢進度的狀態資源。 | RFC 9110 |
203 | Non-Authoritative Information | 非權威資訊。請求成功,但響應體已被中間的轉換代理修改,與原始伺服器的200響應內容不同。 | RFC 9110 |
204 | No Content | 無內容。請求已成功處理,且沒有額外內容需要在響應體中返回。中繼資料仍可通過響應首部傳遞。 | RFC 9110 |
205 | Reset Content | 重設內容。請求已成功處理,用戶端應重設引發該請求的文檔視圖,例如清空表單。 | RFC 9110 |
206 | Partial Content | 部分內容。服務端成功響應了帶Range首部的範圍請求,僅返回目標資源的一個或多個片段。常用於斷點續傳和大檔案分區下載。 | RFC 9110 |
207 | Multi-Status | 多狀態。WebDAV擴充定義,響應體中攜帶多個子操作各自的狀態。 | RFC 4918 |
208 | Already Reported | 已報告。WebDAV綁定擴充定義,用於避免在同一響應中重複枚舉同一資源。 | RFC 5842 |
226 | IM Used | 已應用差量編碼。服務端已對目標資源應用一個或多個差量編碼操作,返回的是差量結果而非完整資源。 | RFC 3229 |
3xx 重新導向
301、302、307、308都表示資源位於另一個URI,區別在於是否永久以及是否允許改變要求方法。歷史原因導致用戶端在處理301和302時可能把POST改寫成GET;如果不希望發生這種改寫,應改用308和307。
狀態代碼 | 標準名稱 | 含義 | 定義來源 |
300 | Multiple Choices | 多種選擇。目標資源有多個可選表示,需要由用戶端或使用者從中選擇一個。 | RFC 9110 |
301 | Moved Permanently | 永久移動。目標資源已指派新的永久URI,後續引用都應改用新URI。服務端應在Location首部給出新URI。 | RFC 9110 |
302 | Found | 已找到。目標資源臨時位於另一個URI。由於重新導向可能隨時變化,用戶端後續請求仍應使用原URI。 | RFC 9110 |
303 | See Other | 參見其他。服務端把用戶端引導至另一個資源以間接回應本次請求。用戶端應對Location指向的URI發起GET或HEAD請求,並把結果作為本次請求的答案。新URI與原目標URI不等價。 | RFC 9110 |
304 | Not Modified | 未修改。條件GET或HEAD請求的前置條件求值為假,說明用戶端已持有有效資源表示,服務端無需重複傳輸,用戶端可直接使用本機快取。該響應不能攜帶響應體。 | RFC 9110 |
305 | Use Proxy | 使用代理。已廢棄,不得在新實現中使用。 | RFC 9110 |
306 | (Unused) | 未使用。曾在早期版本中定義,現已不再使用,該碼保留佔位。 | RFC 9110 |
307 | Temporary Redirect | 臨時重新導向。目標資源臨時位於另一個URI,且用戶端在自動重新導向時不得改變要求方法。 | RFC 9110 |
308 | Permanent Redirect | 永久重新導向。語義與301相同,但要求用戶端在自動重新導向時保持原要求方法。該狀態代碼定義於2014年,比同類狀態代碼晚,部分老舊實現可能無法識別。 | RFC 9110 |
4xx 用戶端錯誤
除響應HEAD請求外,服務端應在響應體中說明錯誤情況以及該錯誤是臨時的還是永久的。這類狀態代碼適用於任何要求方法。
狀態代碼 | 標準名稱 | 含義 | 定義來源 |
400 | Bad Request | 請求有誤。服務端認為請求存在用戶端錯誤而無法處理,例如請求語法錯誤、報文分幀無效或請求路由具有欺騙性。 | RFC 9110 |
401 | Unauthorized | 未認證。請求缺少目標資源所需的有效身份憑據。服務端必須返回WWW-Authenticate首部,說明可用的認證方式。如果請求已帶憑據,則表示這些憑據被拒絕。 | RFC 9110 |
402 | Payment Required | 需要付費。標準保留狀態代碼,語義留待未來定義。 | RFC 9110 |
403 | Forbidden | 禁止訪問。服務端理解該請求但拒絕執行。如果請求已提供憑據,說明服務端認為這些憑據的許可權不足,用戶端不應換用同一憑據自動重試。 | RFC 9110 |
404 | Not Found | 未找到。原始伺服器未找到目標資源的當前表示,或不願透露該資源是否存在。 | RFC 9110 |
405 | Method Not Allowed | 方法不允許。目標資源不支援本次請求使用的方法。服務端必須返回Allow首部,列出該資源支援的方法。 | RFC 9110 |
406 | Not Acceptable | 無可接受表示。目標資源沒有符合請求中內容協商首部要求的表示形式。 | RFC 9110 |
407 | Proxy Authentication Required | 需要代理認證。語義與401類似,但要求用戶端向代理而非原始伺服器提供憑據。 | RFC 9110 |
408 | Request Timeout | 請求逾時。服務端在其願意等待的時間內未收到完整請求。 | RFC 9110 |
409 | Conflict | 狀態衝突。請求與目標資源的目前狀態衝突,無法完成。 | RFC 9110 |
410 | Gone | 已刪除。目標資源在原始伺服器上不再可用,且這一狀態可能是永久的。 | RFC 9110 |
411 | Length Required | 需要內容長度。服務端要求請求攜帶Content-Length首部。 | RFC 9110 |
412 | Precondition Failed | 前置條件失敗。請求首部中的一個或多個前置條件在服務端求值為假。 | RFC 9110 |
413 | Content Too Large | 請求體過大。請求體的大小超出服務端願意或能夠處理的上限。 | RFC 9110 |
414 | URI Too Long | URI過長。請求目標的URI長度超出服務端願意解析的上限。 | RFC 9110 |
415 | Unsupported Media Type | 媒體類型不支援。目標資源不支援要求體所使用的內容格式。 | RFC 9110 |
416 | Range Not Satisfiable | 範圍無法滿足。Range首部指定的範圍與目標資源的當前範圍不匹配,或範圍集合本身無效。 | RFC 9110 |
417 | Expectation Failed | 期望失敗。Expect首部中的期望無法被服務端滿足。 | RFC 9110 |
418 | (Unused) | 未使用。該碼曾被一份非正式的協議草案佔用,現保留佔位,不得賦予新語義。 | RFC 9110 |
421 | Misdirected Request | 請求投遞錯誤。請求被發往一台無法對該URI的權威做出響應的伺服器。 | RFC 9110 |
422 | Unprocessable Content | 內容無法處理。請求體的媒體類型和文法都可被理解,但其中的語義指令無法被處理。 | RFC 9110 |
423 | Locked | 資源鎖定。WebDAV擴充定義,目標資源處於鎖定狀態。 | RFC 4918 |
424 | Failed Dependency | 依賴操作失敗。WebDAV擴充定義,本次操作所依賴的另一個操作未能成功。 | RFC 4918 |
425 | Too Early | 過早。服務端不願處理在TLS早期資料中重放的請求,用戶端應在握手完成後重試。 | RFC 8470 |
426 | Upgrade Required | 需要升級協議。服務端拒絕用當前協議處理該請求,但在用戶端升級協議後可能同意。響應必須包含Upgrade首部。 | RFC 9110 |
428 | Precondition Required | 要求前置條件。服務端要求請求必須帶前置條件,以避免並發更新相互覆蓋。 | RFC 6585 |
429 | Too Many Requests | 請求過多。用戶端在給定時間內發送的請求數超過限制。響應中可能帶Retry-After首部,指示建議的重試等待時間。 | RFC 6585 |
431 | Request Header Fields Too Large | 請求首部過大。單個首部欄位或首部整體的大小超出服務端處理上限。 | RFC 6585 |
451 | Unavailable For Legal Reasons | 因法律原因不可用。服務端因收到法律要求而拒絕提供目標資源。 | RFC 7725 |
5xx 服務端錯誤
狀態代碼 | 標準名稱 | 含義 | 定義來源 |
500 | Internal Server Error | 服務端內部錯誤。服務端遇到意外情況,導致無法完成請求。 | RFC 9110 |
501 | Not Implemented | 未實現。服務端不支援完成該請求所需的功能,通常表示無法識別要求方法。 | RFC 9110 |
502 | Bad Gateway | 網關錯誤。作為網關或代理的服務端從上遊收到了無效響應。 | RFC 9110 |
503 | Service Unavailable | 服務不可用。服務端因臨時過載或計劃內維護,當前無法處理請求。這是一種臨時狀態,響應中可能帶Retry-After首部。 | RFC 9110 |
504 | Gateway Timeout | 網關逾時。作為網關或代理的服務端未能在預期時間內從上遊獲得響應。 | RFC 9110 |
505 | HTTP Version Not Supported | HTTP版本不支援。服務端不支援或拒絕支援要求所用的HTTP主要版本。 | RFC 9110 |
506 | Variant Also Negotiates | 協商配置錯誤。透明內容協商擴充定義,服務端存在內部配置錯誤。 | RFC 2295 |
507 | Insufficient Storage | 儲存空間不足。WebDAV擴充定義,服務端無法為完成請求分配足夠的儲存空間。 | RFC 4918 |
508 | Loop Detected | 檢測到迴圈。WebDAV綁定擴充定義,服務端在處理請求時檢測到無限迴圈。 | RFC 5842 |
510 | Not Extended | 未擴充。原始定義已作廢,該碼在註冊表中保留但語義不再適用。 | RFC 2774 |
511 | Network Authentication Required | 需要網路認證。用戶端需要先通過網路接入認證(例如公用Wi-Fi的門戶頁)才能訪問網路。 | RFC 6585 |