HTTP 狀態碼指的是從伺服器端回應(HTTP Response)的狀態,對於狀態的分類可區分三個層級,分別用三個數字表示,第一個數字為大類、第二個數字為中類、第三個數字為小類。完整的狀態碼定義可以參考 RFC 2616 Hypertext Transfer Protocol – HTTP/1.1 的 10 Status Code Definitions,裡面有完整且詳盡的標準說明。
在 RFC 2616 所定義的 HTTP/1.1 中,狀態碼可以分成 5 類
- 1xx Informationa - 參考資訊
- 2xx Successful - 成功
- 3xx Redirection - 重新導向
- 4xx Client Error - 用戶端錯誤
- 5xx Server Error - 伺服器錯誤
以下就根據 RFC 2616 標準中的這五類來做說明。
IIS 基於此標準上設計了自己的 HTTP 狀態碼,可以參考這裡
1xx Informational 參考資訊
這些狀態碼代表主機先暫時回應用戶端一個狀態,所以在接收一般的回應之前,用戶端應準備接收一個或多個 1xx 的回應。
100
Continue - 繼續執行所發出的請求。- 根據 RFC 2616 Sec8.2.3 描述,當 POST 的資料大於 1024 時,請求會分兩步,第一步發送
Expect:100-continue
詢問伺服器是否接受此資料,確認接受後,第二步才 POST 資料給伺服器。
- 根據 RFC 2616 Sec8.2.3 描述,當 POST 的資料大於 1024 時,請求會分兩步,第一步發送
101
Switching Protocols - 切換通訊協定。
2xx Successful 成功
這類的狀態碼表示伺服器成功接收到用戶端的要求、理解用戶端要求、以及接受用戶端要求。
200
OK - 確定。用戶端要求成功。201
Created - 已建立。202
Accepted - 已接受。203
Non-Authoritative Information - 非授權資訊。204
No Content - 無內容。205
Reset Content - 重設內容。206
Partial Content - 部分內容。
3xx Redirection 重新導向
用戶端瀏覽器必須採取更多動作才能完成要求。例如瀏覽器可能必須重新發出 HTTP Request 要求伺服器上的不同頁面。
300
Multiple Choices301
Moved Permanently - 要求的網頁已經永久改變網址。此狀態要求用戶端未來在連結此網址時應該導向至指定的 URI。302
Found - 物件已移動,並告知移動過去的網址。303
See Other - 通知用戶端使用 GET 連到另一個 URI 去查看。304
Not Modified - 未修改。用戶端要求該網頁時,其內容並沒有變更。305
Use Proxy - 要求的網頁必須透過 Server 指定的 proxy 才能查看(需透過 Location 標頭)。306
(Unused)- (未使用) 此代碼僅用來為了向前相容而已。307
Temporary Redirect - 暫時重新導向。要求的網頁只是「暫時」改變網址而已。
4xx Client Error 用戶端錯誤
這代表錯誤發生,且這錯誤的發生的原因跟「用戶端」有關。例如:用戶端可能連結到不存在的頁面、用戶端的權限不足、或可能未提供有效的驗證資訊(輸入的帳號、密碼錯誤)。下次看到 4xx 的回應千萬不要傻傻的一直查程式哪裡寫錯誤了(不過也有可能是程式造成的)。
400
Bad Request - 錯誤的要求。401
Unauthorized - 拒絕存取。402
Payment Required403
Forbidden - 禁止使用。404
Not Found - 找不到。405
Method Not Allowed - 用來存取這個頁面的 HTTP 動詞不受允許 (方法不受允許)。406
Not Acceptable - 用戶端瀏覽器不接受要求頁面的 MIME 類型。407
Proxy Authentication Required - 需要 Proxy 驗證。408
Request Timeout - 請求逾時。409
Conflict - 資源狀態衝突。410
Gone - 資源已不存在且無轉址資訊。411
Length Required - 要求的 Content-Length 沒有定義。412
Precondition Failed - 指定條件失敗。413
Request Entity Too Large - 要求的實體太大。414
Request-URI Too Long - 要求 URI 太長。會因伺服器或瀏覽器而異,建議 2048 字元以下比較保險。415
Unsupported Media Type - 不支援的媒體類型。416
Requested Range Not Satisfiable - 無法滿足要求的範圍。417
Expectation Failed - 執行失敗。
5xx Server Error 伺服器錯誤
這代表錯誤發生,且這錯誤發生的原因跟「伺服器」有關。伺服器因為發生錯誤或例外狀況(Exception)而無法完成要求(Request)時,就會回應 5xx 的錯誤,且這肯定跟伺服器有關。
500
Internal Server Error - 內部伺服器錯誤。501
Not Implemented – 標頭值指定未實作的設定。502
Bad Gateway - Web 伺服器在作為閘道或 Proxy 時收到無效的回應。503
Service Unavailable - 服務無法使用。 這是 IIS 6.0 專用的錯誤碼。504
Gateway Timeout - 閘道逾時。505
HTTP Version Not Supported - 不支援的 HTTP 版本。
後記
網路上有人畫出了 HTTP 狀態的決策流程圖,詳細可看看這個專案 for-GET/http-decision-diagram,或是直接點開下圖:
畫出這決策流程的人,真的很強大耶!
參考資料:
- HTTP/1.1: Status Code Definitions[英文]
- IIS 狀態碼說明
- HTTP 狀態碼
- HTTP 狀態碼代表什麼意義?
- HTTP Extensions for Distributed Authoring – WEBDAV
- List of HTTP status codes - Wikipedia, the free encyclopedia
- ASP.NET Core - How to return a specific status code and no contents from Controller?
- 保哥:網頁開發人員應瞭解的 HTTP 狀態碼
- !false 技術客 - HTTP 狀態碼 (Status Codes)