HTTP狀態碼

最近更新時間 2020-01-05 16:08:14

HTTP狀態碼是用以表示網頁服務器超文本傳輸協議響應狀態的3位數字代碼。所有狀態碼的第一個數字代表了響應的五種狀態之一。所示的消息短語是典型的,但是可以提供任何可讀取的替代方案。狀態代碼由 section 10 of RFC 2616定義。HTTP狀態碼的官方註冊表由互聯網號碼分配局維護。

響應分為五類:

  • 信息響應(100–199)。
  • 成功響應(200–299)。
  • 重定向(300–399)。
  • 客戶端錯誤(400–499)。
  • 服務器錯誤 (500–599)。

信息響應

這一類型的狀態碼,代表請求已被接受,需要繼續處理。這類響應是臨時響應,只包含狀態行和某些可選的響應頭信息,並以空行結束。由於HTTP/1.0協議中沒有定義任何1xx狀態碼,所以除非在某些試驗條件下,服務器禁止向此類客戶端發送1xx響應。這些狀態碼代表的響應都是信息性的,標示客戶應該採取的其他行動。

  • 100 Continue
    服務器已經接收到請求頭,並且客戶端應繼續發送請求主體(在需要發送身體的請求的情況下:例如,POST請求),或者如果請求已經完成,忽略這個響應。服務器必須在請求完成後向客戶端發送一個最終響應。要使服務器檢查請求的頭部,客戶端必須在其初始請求中發送Expect: 100-continue作為頭部,並在發送正文之前接收100 Continue狀態代碼。響應代碼417期望失敗表示請求不應繼續。
  • 101 Switching Protocol
    該代碼是響應客戶端的 Upgrade 標頭髮送的,並且指示服務器也正在切換的協議。
  • 102 Processing(WebDAV)
    該代碼是響應客戶端的 Upgrade 標頭髮送的,並且指示服務器也正在切換的協議。
  • 103 Early Hints
    此狀態代碼主要用於與Link 鏈接頭一起使用,以允許用戶代理在服務器仍在準備響應時開始預加載資源。

成功響應

這一類型的狀態碼,代表請求已成功被服務器接收、理解、並接受。

  • 200 OK
    請求成功。成功的含義取決於HTTP方法:
    • GET:資源已被提取並在消息正文中傳輸。
    • HEAD:實體標頭位於消息正文中。
    • POST:描述動作結果的資源在消息體中傳輸。
    • TRACE:消息正文包含服務器收到的請求消息
  • 201 Created
    該請求已成功,並因此創建了一個新的資源。這通常是在POST請求,或是某些PUT請求之後返回的響應。
  • 202 Accepted
    請求已經接收到,但還未響應,沒有結果。意味著不會有一個異步的響應去表明當前請求的結果,預期另外的進程和服務去處理請求,或者批處理。
  • 203 Non-Authoritative Information
    服務器已成功處理了請求,但返回的實體頭部元信息不是在原始服務器上有效的確定集合,而是來自本地或者第三方的拷貝。當前的信息可能是原始版本的子集或者超集。例如,包含資源的元數據可能導致原始服務器知道元信息的超集。使用此狀態碼不是必須的,而且只有在響應不使用此狀態碼便會返回200 OK的情況下才是合適的。
  • 204 No Content
    服務器成功處理了請求,但不需要返回任何實體內容,並且希望返回更新了的元信息。響應可能通過實體頭部的形式,返回新的或更新後的元信息。如果存在這些頭部信息,則應當與所請求的變量相呼應。如果客戶端是瀏覽器的話,那麼用戶瀏覽器應保留髮送了該請求的頁面,而不產生任何文檔視圖上的變化,即使按照規範新的或更新後的元信息應當被應用到用戶瀏覽器活動視圖中的文檔。由於204響應被禁止包含任何消息體,因此它始終以消息頭後的第一個空行結尾。
  • 205 Reset Content
    服務器成功處理了請求,且沒有返回任何內容。但是與204響應不同,返回此狀態碼的響應要求請求者重置文檔視圖。該響應主要是被用於接受用戶輸入後,立即重置表單,以便用戶能夠輕鬆地開始另一次輸入。與204響應一樣,該響應也被禁止包含任何消息體,且以消息頭後的第一個空行結束。
  • 206 Partial Content
    服務器已經成功處理了部分 GET 請求。類似於 FlashGet 或者迅雷這類的 HTTP 下載工具都是使用此類響應實現斷點續傳或者將一個大文檔分解為多個下載段同時下載。該請求必須包含 Range 頭信息來指示客戶端希望得到的內容範圍,並且可能包含 If-Range 來作為請求條件。
  • 207 Multi-Status(WebDAV)
    由WebDAV(RFC 2518)擴展的狀態碼,代表之後的消息體將是一個XML消息,並且可能依照之前子請求數量的不同,包含一系列獨立的響應代碼。
  • 208 Already Reported(WebDAV)
    在 DAV 裡面使用: propstat 響應元素以避免重複枚舉多個綁定的內部成員到同一個集合。
  • 226 IM Used(HTTP Delta encoding)
    服務器已經完成了對資源的 GET 請求,並且響應是對當前實例應用的一個或多個實例操作結果的表示。

重定向

這類狀態碼代表需要客戶端採取進一步的操作才能完成請求。通常,這些狀態碼用來重定向,後續的請求地址(重定向目標)在本次響應的Location域中指明。

當且僅當後續的請求所使用的方法是GET或者HEAD時,用戶瀏覽器才可以在沒有用戶介入的情況下自動提交所需要的後續請求。客戶端應當自動監測無限循環重定向(例如:A→B→C→……→A或A→A),因為這會導致服務器和客戶端大量不必要的資源消耗。按照HTTP/1.0版規範的建議,瀏覽器不應自動訪問超過5次的重定向。

  • 300 Multiple Choice
    被請求的資源有一系列可供選擇的回饋信息,每個都有自己特定的地址和瀏覽器驅動的商議信息。用戶或瀏覽器能夠自行選擇一個首選的地址進行重定向。
  • 301 Moved Permanently
    被請求的資源已永久移動到新位置,並且將來任何對此資源的引用都應該使用本響應返回的若干個 URI 之一。如果可能,擁有鏈接編輯功能的客戶端應當自動把請求的地址修改為從服務器反饋回來的地址。除非額外指定,否則這個響應也是可緩存的。
  • 302 Found
    請求的資源現在臨時從不同的 URI 響應請求。由於這樣的重定向是臨時的,客戶端應當繼續向原有地址發送以後的請求。只有在Cache-Control或Expires中進行了指定的情況下,這個響應才是可緩存的。
  • 303 See Other
    對應當前請求的響應可以在另一個 URI 上被找到,而且客戶端應當採用 GET 的方式訪問那個資源。這個方法的存在主要是為了允許由腳本激活的POST請求輸出重定向到一個新的資源。
  • 304 Not Modified
    如果客戶端發送了一個帶條件的 GET 請求且該請求已被允許,而文檔的內容(自上次訪問以來或者根據請求的條件)並沒有改變,則服務器應當返回這個狀態碼。304 響應禁止包含消息體,因此始終以消息頭後的第一個空行結尾。
  • 305 Use Proxy
    被請求的資源必須通過指定的代理才能被訪問。Location 域中將給出指定的代理所在的 URI 信息,接收者需要重複發送一個單獨的請求,通過這個代理才能訪問相應資源。只有原始服務器才能建立305響應。
  • 306 unused
    在最新版的規範中,306 狀態碼已經不再被使用。
  • 307 Temporary Redirect
    請求的資源現在臨時從不同的URI 響應請求。由於這樣的重定向是臨時的,客戶端應當繼續向原有地址發送以後的請求。只有在Cache-Control或Expires中進行了指定的情況下,這個響應才是可緩存的。
  • 308 Permanent Redirect
    這意味著資源現在永久位於由 Location: HTTP Response 標頭指定的另一個 URI。 這與 301 Moved Permanently HTTP 響應代碼具有相同的語義,但用戶代理不能更改所使用的 HTTP 方法:如果在第一個請求中使用 POST,則必須在第二個請求中使用 POST。

客戶端響應

這類狀態碼代表需要客戶端採取進一步的操作才能完成請求。通常,這些狀態碼用來重定向,後續的請求地址(重定向目標)在本次響應的Location域中指明。

當且僅當後續的請求所使用的方法是GET或者HEAD時,用戶瀏覽器才可以在沒有用戶介入的情況下自動提交所需要的後續請求。客戶端應當自動監測無限循環重定向(例如:A→B→C→……→A或A→A),因為這會導致服務器和客戶端大量不必要的資源消耗。按照HTTP/1.0版規範的建議,瀏覽器不應自動訪問超過5次的重定向。

  • 400 Bad Request
    語義有誤,當前請求無法被服務器理解。除非進行修改,否則客戶端不應該重複提交這個請求。
    請求參數有誤。
  • 401 Unauthorized
    當前請求需要用戶驗證。該響應必須包含一個適用於被請求資源的 WWW-Authenticate 信息頭用以詢問用戶信息。客戶端可以重複提交一個包含恰當的 Authorization 頭信息的請求。如果當前請求已經包含了 Authorization 證書,那麼401響應代表著服務器驗證已經拒絕了那些證書。如果401響應包含了與前一個響應相同的身份驗證詢問,且瀏覽器已經至少嘗試了一次驗證,那麼瀏覽器應當向用戶展示響應中包含的實體信息,因為這個實體信息中可能包含了相關診斷信息。
  • 402 Payment Required
    此響應碼保留以便將來使用,創造此響應碼的最初目的是用於數字支付系統,然而現在並未使用。
  • 403 Forbidden
    服務器已經理解請求,但是拒絕執行它。與 401 響應不同的是,身份驗證並不能提供任何幫助,而且這個請求也不應該被重複提交。如果這不是一個 HEAD 請求,而且服務器希望能夠講清楚為何請求不能被執行,那麼就應該在實體內描述拒絕的原因。當然服務器也可以返回一個 404 響應,假如它不希望讓客戶端獲得任何信息。
  • 404 Not Found
    請求失敗,請求所希望得到的資源未被在服務器上發現。沒有信息能夠告訴用戶這個狀況到底是暫時的還是永久的。假如服務器知道情況的話,應當使用410狀態碼來告知舊資源因為某些內部的配置機制問題,已經永久的不可用,而且沒有任何可以跳轉的地址。404這個狀態碼被廣泛應用於當服務器不想揭示到底為何請求被拒絕或者沒有其他適合的響應可用的情況下。
  • 405 Method Not Allowed
    請求行中指定的請求方法不能被用於請求相應的資源。該響應必須返回一個Allow 頭信息用以表示出當前資源能夠接受的請求方法的列表。 鑑於 PUT,DELETE 方法會對服務器上的資源進行寫操作,因而絕大部分的網頁服務器都不支持或者在默認配置下不允許上述請求方法,對於此類請求均會返回405錯誤。
  • 406 Not Acceptable
    請求的資源的內容特性無法滿足請求頭中的條件,因而無法生成響應實體。
  • 407 Proxy Authentication Required
    與401響應類似,只不過客戶端必須在代理服務器上進行身份驗證。代理服務器必須返回一個 Proxy-Authenticate 用以進行身份詢問。客戶端可以返回一個 Proxy-Authorization 信息頭用以驗證。
  • 408 Request Timeout
    請求超時。客戶端沒有在服務器預備等待的時間內完成一個請求的發送。客戶端可以隨時再次提交這一請求而無需進行任何更改。
  • 409 Conflict
    由於和被請求的資源的當前狀態之間存在衝突,請求無法完成。這個代碼只允許用在這樣的情況下才能被使用:用戶被認為能夠解決衝突,並且會重新提交新的請求。該響應應當包含足夠的信息以便用戶發現衝突的源頭。
  • 410 Gone
    被請求的資源在服務器上已經不再可用,而且沒有任何已知的轉發地址。這樣的狀況應當被認為是永久性的。如果可能,擁有鏈接編輯功能的客戶端應當在獲得用戶許可後刪除所有指向這個地址的引用。如果服務器不知道或者無法確定這個狀況是否是永久的,那麼就應該使用 404 狀態碼。除非額外說明,否則這個響應是可緩存的。
  • 411 Length Required
    服務器拒絕在沒有定義 Content-Length 頭的情況下接受請求。在添加了表明請求消息體長度的有效 Content-Length 頭之後,客戶端可以再次提交該請求。
  • 412 Precondition Failed
    服務器在驗證在請求的頭字段中給出先決條件時,沒能滿足其中的一個或多個。這個狀態碼允許客戶端在獲取資源時在請求的元信息(請求頭字段數據)中設置先決條件,以此避免該請求方法被應用到其希望的內容以外的資源上。
  • 413 Payload Too Large
    服務器拒絕處理當前請求,因為該請求提交的實體數據大小超過了服務器願意或者能夠處理的範圍。此種情況下,服務器可以關閉連接以免客戶端繼續發送此請求。如果這個狀況是臨時的,服務器應當返回一個 Retry-After 的響應頭,以告知客戶端可以在多少時間以後重新嘗試。
  • 414 URI Too Long
    請求的URI 長度超過了服務器能夠解釋的長度,因此服務器拒絕對該請求提供服務。這比較少見,通常的情況包括:本應使用POST方法的表單提交變成了GET方法,導致查詢字符串(Query String)過長。
  • 415 Unsupported Media Type
    對於當前請求的方法和所請求的資源,請求中提交的實體並不是服務器中所支持的格式,因此請求被拒絕。
  • 416 Range Not Satisfiable
    如果請求中包含了 Range 請求頭,並且 Range 中指定的任何數據範圍都與當前資源的可用範圍不重合,同時請求中又沒有定義 If-Range 請求頭,那麼服務器就應當返回416狀態碼。
  • 417 Expectation Failed
    此響應代碼意味著服務器無法滿足 Expect 請求標頭字段指示的期望值。
  • 418 I'm a teapot
    服務器拒絕嘗試用 “茶壺沖泡咖啡”。
  • 421 Misdirected Request
    該請求針對的是無法產生響應的服務器。 這可以由服務器發送,該服務器未配置為針對包含在請求 URI 中的方案和權限的組合產生響應。
  • 422 Unprocessable Entity(WebDAV)
    請求格式良好,但由於語義錯誤而無法遵循。
  • 423 Locked(WebDAV)
    正在訪問的資源被鎖定。
  • 424 Failed Dependency(WebDAV)
    由於先前的請求失敗,所以此次請求失敗。
  • 425 Too Early
    服務器不願意冒著風險去處理可能重播的請求。
  • 426 Upgrade Required
    服務器拒絕使用當前協議執行請求,但可能在客戶機升級到其他協議後願意這樣做。 服務器在 426 響應中發送 Upgrade 頭以指示所需的協議。
  • 428 Precondition Required
    原始服務器要求該請求是有條件的。 旨在防止“丟失更新”問題,即客戶端獲取資源狀態,修改該狀態並將其返回服務器,同時第三方修改服務器上的狀態,從而導致衝突。
  • 429 Too Many Requests
    用戶在給定的時間內發送了太多請求(“限制請求速率”)。
  • 431 Request Header Fields Too Large
    服務器不願意處理請求,因為它的 請求頭字段太大( Request Header Fields Too Large)。 請求可以在減小請求頭字段的大小後重新提交。
  • 451 Unavailable For Legal Reasons
    用戶請求非法資源,例如:由政府審查的網頁。

服務端響應

表示服務器無法完成明顯有效的請求。這類狀態碼代表了服務器在處理請求的過程中有錯誤或者異常狀態發生,也有可能是服務器意識到以當前的軟硬件資源無法完成對請求的處理。除非這是一個HEAD請求,否則服務器應當包含一個解釋當前錯誤狀態以及這個狀況是臨時的還是永久的解釋信息實體。瀏覽器應當向用戶展示任何在當前響應中被包含的實體。這些狀態碼適用於任何響應方法。

  • 500 Internal Server Error
    服務器遇到了不知道如何處理的情況。
  • 501 Not Implemented
    此請求方法不被服務器支持且無法被處理。只有GET和HEAD是要求服務器支持的,它們必定不會返回此錯誤代碼。
  • 502 Bad Gateway
    此錯誤響應表明服務器作為網關需要得到一個處理這個請求的響應,但是得到一個錯誤的響應。
  • 503 Service Unavailable
    服務器沒有準備好處理請求。 常見原因是服務器因維護或重載而停機。
    請注意,與此響應一起,應發送解釋問題的用戶友好頁面。 這個響應應該用於臨時條件和 Retry-After:如果可能的話,HTTP頭應該包含恢復服務之前的估計時間。 網站管理員還必須注意與此響應一起發送的與緩存相關的標頭,因為這些臨時條件響應通常不應被緩存。
  • 504 Gateway Timeout
    當服務器作為網關,不能及時得到響應時返回此錯誤代碼。
  • 505 HTTP Version Not Supported
    服務器不支持請求中所使用的HTTP協議版本。
  • 506 Variant Also Negotiates
    服務器有一個內部配置錯誤:對請求的透明內容協商導致循環引用。
  • 507 Insufficient Storage
    服務器無法存儲完成請求所必須的內容。這個狀況被認為是臨時的。
  • 508 Loop Detected(WebDAV)
    服務器在處理請求時陷入死循環。
  • 510 Not Extended
    獲取資源所需要的策略並沒有被滿足。
  • 511 Network Authentication Required
    客戶端需要進行身份驗證才能獲得網絡訪問權限,旨在限制用戶群訪問特定網絡。(例如連接WiFi熱點時的強制網絡門戶)
rss_feed