歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> 從HTTP服務器狀態代碼分析

從HTTP服務器狀態代碼分析

日期:2017/3/6 15:51:40   编辑:關於Unix
1.1 消息1xx(Informational 1xx) 該類狀態代碼用於表示臨時回應。臨時回應由狀態行(Status-Line)及可選標題組成, 由空行終止。HTTP/1.0中沒有定義任何1xx的狀態代碼,所以它們不是對HTTP/1.0請求的 合法回應。實際上,它們主要用於實驗用途,這已經超出
  1.1 消息1xx(Informational 1xx)
  該類狀態代碼用於表示臨時回應。臨時回應由狀態行(Status-Line)及可選標題組成, 由空行終止。HTTP/1.0中沒有定義任何1xx的狀態代碼,所以它們不是對HTTP/1.0請求的   合法回應。實際上,它們主要用於實驗用途,這已經超出本文檔的范圍。
  1.2 成功2xx(Suclearcase/" target="_blank" >ccessful 2xx)
  表示客戶端請求被成功接收、理解、接受。
  200 OK
  請求成功。回應的信息依賴於請求所使用的方法,如下:
  GET 要請求的資源已經放在回應的實體中了。
  HEAD 沒有實體主體,回應中只包括標題信息。?
  POST 實體(描述或包含操作的結果)。
  201 Created
  請求完成,結果是創建了新資源。新創建資源的URI可在回應的實體中得到。原始服務器應在發出該狀態代碼前創建該資源。如果該操作不能立即完成,服務器必須在該資源可用時在回應主體中給出提示,否則,服務器端應回應202(可被接受)。
  在本文定義的方法,只有POST可以創建資源。
  202 Accepted
  請求被接受,但處理尚未完成。請求可能不一定會最終完成,有可能被處理過程隨時中斷,在這種情況下,沒有辦法在異步操作中重新發送狀態代碼。
  202回應是沒有義務的,這樣做的目的是允許服務器不必等到用戶代理和服務器間的連接結束,就可以響應其它過程的請求(象每天運行一次的,基於批處理的過程)。
  在某些回應中返回的實體中包括當前請求的狀態指示、狀態監視器指針或用戶對請求能否實現的評估信息。
  204 No Content
  服務器端已經實現了請求,但是沒有返回新的信息。如果客戶是用戶代理,則勿需為此更新自身的文檔視圖。該回應主要是為了在不影響用戶代理激活文檔視圖的前提下,進行script語句的輸入及其它操作。該回應還可能包括新的、以實體標題形式表示的元信息,它可被當前用戶代理激活視圖中的文檔所使用。
  1.3 重定向(Redirection 3xx)
  該類狀態碼表示用戶代理要想完成請求,還需要發出進一步的操作。這些操作只有當後跟的請求是GET或HEAD時,才可由用戶代理來實現,而不用與用戶進行交互。用戶代理永遠也不要對請求進行5次以上的重定向操作,這樣可能導致無限循環。
  300 Multiple Choices
  該狀態碼不被HTTP/1.0的應用程序直接使用,只是做為3xx類型回應的缺省解釋。存在多個可用的被請求資源。
  除非是HEAD請求,否則回應的實體中必須包括這些資源的字符列表及位置信息,由用戶或用戶代理來決定哪個是最適合的。
  如果服務器有首選,它應將對應的URL信息存放在位置域(Location field)處,用戶代理會根據此域的值來實現自動的重定向。
  301 Moved Permanently
  請求到的資源都會分配一個永久的URL,這樣就可以在將來通過該URL來訪問此資源。有編輯鏈接功能的客戶端會盡可能地根據服務器端傳回的新鏈接而自動更新請求URI。 新的URL必須由回應中的位置域指定。除非是HEAD請求,否則回應的實體主體   (Entity-Body)必須包括對新URL超鏈接的簡要描述。
  如果用POST方法發出請求,而接收到301回應狀態碼。在這種情況下,除非用戶確認,否則用戶代理不必自動重定向請求,因為這將導致改變已發出請求的環境。
  注意:當在接收到301狀態碼後而自動重定向POST請求時,一些現存的用戶代理會錯誤地將其改為GET請求。
  302 Moved Temporarily
  請求到的資源在一個不同的URL處臨時保存。因為重定向有時會被更改,客戶端應繼續用請求URI來發出以後的請求。新的URL必須由回應中的位置域指定。除非是HEAD請求,否則回應的實體主體 (Entity-Body)必須包括對新URL超鏈接的簡要描述。
  如果用POST方法發出請求,而接收到302回應狀態碼。在這種情況下,除非用戶確認,否則用戶代理不必自動重定向請求,因為這將導致改變已發出請求的環境。
  注意:當在接收到302狀態碼後而自動重定向POST請求時,一些現存的用戶代理會錯誤地將其改為GET請求。
  304 Not Modified
  如果客戶端成功執行了條件GET請求,而對應文件自If-Modified-Since域所指定的日期以來就沒有更新過,服務器應當回應此狀態碼,而不是將實體主體發送給客戶端。回應標題域中只應包括一些相關信息,比如緩存管理器、與實體最近更新(entity's Last-Modified)日期無關的修改。相關標題域的例子有:日期、服務器、過期時間。每當304回應中給出的域值發生變化,緩存都應當對緩存的實體進行更新。
  1.4 客戶端錯誤(Client Error )4xx
  4xx類的狀態碼表示客戶端發生錯誤。如果客戶端在收到4xx代碼時請求還沒有完成,它應當立即終止向服務器發送數據。除了回應HEAD請求外,不論錯誤是臨時的還是永久的,服務器端都必須在回應的實體中包含錯誤狀態的解釋。這些狀態碼適用於任何請求方法。
  注意:如果客戶端正在發送數據,服務器端的TCP實現應當小心,以確保客戶端在關閉輸入連接之前收到回應包。如果客戶端在關閉後仍舊向服務器發送數據,服務器會給客戶  端發送一個復位包,清空客戶端尚未處理的輸入緩沖區,以終止HTTP應用程序的讀取、解釋活動。
  400 非法請求(Bad Request)
  如果請求的語法不對,服務器將無法理解。客戶端在對該請求做出更改之前,不應再次向服務器重復發送該請求。
  401 未授權(Unauthorized)
  請求需要用戶授權。回應中的WWW-Authenticate標題域(10.16節)應提示用戶以授權方式請求資源。客戶端應使用合適的授權標題域(10.2節)來重復該請求。如果請求中已經包括了授權信任信息,那回應的401表示此授權被拒絕。如果用戶代理在多次嘗試之後,回應一樣還是返回401狀態代碼,用戶應當察看一下回應的實體,因為在實體中會包括一些相關的動態信息。HTTP訪問授權會在11節中解釋。
  403 禁止(Forbidden)
  服務器理解請求,但是拒絕實現該請求。授權對此沒有幫助,客戶端應當停止重復發送此請求。如果不是用HEAD請求方法,而且服務器端願意公布請求未被實現原因的前提下,服務器會將拒絕原因寫在回應實體中。該狀態碼一般用於服務器端不想公布請求被拒絕的細節或沒有其它的回應可用。
  404 沒有找到(Not Found)
  服務器沒有找到與請求URI相符的資源。404狀態碼並不指明狀況是臨時性的還是永久性的。如果服務器不希望為客戶端提供這方面的信息,還回應403(禁止)狀態碼。
  1.5 服務器錯誤(Server Error )5xx
  回應代碼以‘5’開頭的狀態碼表示服務器端發現自己出現錯誤,不能繼續執行請求。如果客戶端在收到5xx狀態碼時,請求尚未完成,它應當立即停止向服務器發送數據。除了回應HEAD請求外,服務器應當在其回應實體中包括對錯誤情況的解釋、並指明是臨時性的還永久性的。
  這類回應代碼沒有標題域,可適用於任何請求方法。
  500 服務器內部錯誤(Internal Server Error)
  服務器碰到了意外情況,使其無法繼續回應請求。
  501 未實現(Not Implemented)
  服務器無法提供對請求中所要求功能的支持。如果服務器無法識別請求方法就會回應此狀態代碼,這意味著不能回應請求所要求的任何資源。
  502 非法網關(Bad Gateway)
  充當網關或代理的服務器從要發送請求的上游(upstream)服務器收到非法的回應。
  503 服務不可用(Service Unavailable)
  服務器當前無法處理請求。這一般是由於服務器臨時性超載或維護引起的。該狀態碼暗示情況是暫時性的,要產生一些延遲。
  注意:503狀態碼並沒有暗示服務器在超載時一定要返回此狀態碼。一些服務器可能希望在超載時采用簡單處理,即斷掉連接。

Copyright © Linux教程網 All Rights Reserved