1. 程式人生 > >02 http協議概述及常見的14種http協議狀態碼

02 http協議概述及常見的14種http協議狀態碼

http協議簡介
    HTTP協議是(超文字傳輸協議Hyper Text Transfer Protocol)的縮寫,是用於全球資訊網(WWW:World Wide Web)伺服器與本地瀏覽器之間傳輸超文字的傳送協議.
    HTTP是一個屬於應用層的面向物件的協議,由於其簡捷、快速的方式,適用於分散式超媒體資訊系統.它於1990年提出,經過幾年的使用與發展,得到不斷地完善和擴充套件.
    HTTP協議工作於客戶端-服務端架構為上.瀏覽器作為HTTP客戶端通過URL向HTTP服務端即WEB伺服器傳送所有請求.Web伺服器根據接收到的請求後,向客戶端傳送響應資訊.
    


    
http協議特性
    -基於TCP/IP
    http協議是基於TCP/IP協議之上的應用層協議.
    -基於請求-響應模式
    
    HTTP協議規定,請求從客戶端發出,最後伺服器端響應該請求並返回.換句話說,肯定是先從客戶端開始建立通訊的,伺服器端在沒有接收到請求之前不會發送響應.
    -無狀態儲存
    
    HTTP是一種不儲存狀態,即無狀態(stateless)協議.HTTP協議自身不對請求和響應之間的通訊狀態進行儲存.也就是說在HTTP這個級別,協議對於傳送過的請求或響應都不做持久化處理.
    使用HTTP協議,每當有新的請求傳送時,就會有對應的新響應產生.協議本身並不保留之前一切的請求或響應報文的資訊.這是為了更快地處理大量事務,確保協議的可伸縮性,而特意把HTTP協議設計成如此簡單的.可是,隨著Web的不斷髮展,因無狀態而導致業務處理變得棘手的情況增多了.比如,使用者登入到一家購物網站,即使他跳轉到該站的其他頁面後,也需要能繼續保持登入狀態.針對這個例項,網站為了能夠掌握是誰送出的請求,需要儲存使用者的狀態.HTTP/1.1雖然是無狀態協議,但為了實現期望的保持狀態功能,於是引入了Cookie技術.有了Cookie再用HTTP協議通訊,就可以管 理狀態了.有關Cookie的詳細內容稍後講解.
    -無連線

    無連線的含義是限制每次連線只處理一個請求.伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線.採用這種方式可以節省傳輸時間.
    
http請求協議與響應協議
    http協議包含由瀏覽器傳送資料到伺服器需要遵循的請求協議與伺服器傳送資料到瀏覽器需要遵循的請求協議.用於HTTP協議互動的信被為HTTP報文.請求端(客戶端)的HTTP報文做請求報文,響應端(伺服器端)的做響應報文.HTTP報文字身是由多行資料構成的字文字.
    
    
    -請求協議

    
    
    請求方式:Get與Post請求
    GET 提交的資料會放在URL之後,以?分割URL和傳輸資料,引數之間以&相連,如EditBook?name=test1&id=123456.
    POST提交的資料會放在HTTP包的請求體中.
    GET提交的資料大小有限制(因為瀏覽器對URL的長度有限制),而POST方法提交的資料沒有限制.
    GET與POST請求在服務端獲取請求資料方式不同。
    
    -響應協議
    
    
    -響應狀態碼
    狀態碼的職能是當客戶端向伺服器端傳送請求時,返回的請求結果.
    藉助狀態碼,使用者可以知道伺服器端是正常處理了請求,還是出現了什麼錯誤。
    數字中的第一位指定了響應類別,後兩位無分類.
    響應類別有以下5種:
    型別觸發動作說明
    1XX    Informational資訊性狀態碼,表示接受的請求正在處理
    2XX    Success成功狀態碼,表示請求正常處理完畢
    3XX    Redirection重定向狀態碼,表示需要客戶端需要進行附加操作
    4XX    Client Error客戶端錯誤狀態碼,表示伺服器無法處理請求
    5XX    Server Error伺服器錯誤狀態碼,表示伺服器處理請求出錯

 

常見的14種狀態碼


    RFC2616記錄的HTTP狀態碼有37種,再加上「WebDAV」(RFC4918、5842)和「Additional HTTP Status Codes」(RFC6585),數量就達到60多種。
    然並卵,這麼多種HTTP狀態碼,其實常用的大概只有14種.
    2XX Success
        響應結果表示從客戶端發來的請求在伺服器端被正常處理了。
        -200 OK
        請求被成功處理,伺服器會根據不同的請求方法返回結果.
        GET :請求的對應資源會作為響應返回.
        HEAD:請求的對應資源的響應頭(entity-header)會作為響應返回,不包括響應體(message-body).
        POST:返回處理對應請求的結果。

        -204 No Content
        該狀態碼錶示伺服器接收到的請求已經處理完畢,但是伺服器不需要返回響應體.
        比如,客戶端是瀏覽器的話,發出的請求返回204響應,那麼瀏覽器顯示的頁面不會發生更新。

        -206 Partial Content
        該狀態碼錶示客戶端進行了範圍請求,而伺服器成功執行了這部分的GET請求。
        客戶端發起的請求,必須在請求頭中包含Range欄位.服務端響應報文中,必須包含由Content-Range指定範圍的實體內容(entity-bodies)

    3XX Redirection
        響應結果表明瀏覽器需要執行某些特殊的處理以完成請求。
        301 Movied Permanently
        永久性重定向,該狀態碼錶示請求的資源已經被分配了新的URI,並且以後使用資源現在所指的URI.並且根據請求的方法有不同的處理方式:
        HEAD:必須在響應頭部Location欄位中指明新的永久性的URI.
        GET :除了有Location欄位以外,還需要在響應體中附上永久性URI的超連結文字.
        POST:客戶端在傳送POST請求,受到301響應之後,不應該自動跳轉URI,應當讓使用者確認跳轉.
        比如,如果一個URI已經在瀏覽器中被收藏為書籤,這時應該按照Location首部欄位提示的URI重新儲存。

        -302 Found
        臨時性重定向,該狀態碼錶示請求的資源已被分配了新的URI,希望使用者本次能使用新的URI訪問.
        和301狀態碼相似,但302狀態碼代表的資源不是被永久移動,只是臨時性質的.
        如果,使用者把一個URI收藏為書籤,302響應是不會像301那樣去更新書籤.

        -303 See Other
        該狀態碼錶示由於請求對應的資源存在另一個URI,應使用GET方法定向獲取請求的資源.
        303與302不同之處在於,302是不會改變請求的方法,如果請求方法是POST的話,重定向的請求也應該是POST.
        而對於303,使用POST請求的話,重定向的請求應該是GET請求.
        但是有一點是需要注意的,許多HTTP/1.1版以前的瀏覽器不能正確理解303狀態碼,很多現存的瀏覽器將302響應視為303響應,並且使用GET方式訪問Location中規定的的URI,而無視原先請求的方法.

        -304 Not Modified
        該狀態碼錶示客戶端傳送附帶條件請求時,伺服器端允許請求訪問資源,但未滿足條件的情況.
        304狀態碼返回時,不包含任何響應的主題部分.附帶條件的請求指的是採用GET方法的請求頭中包含:If-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since中任一首部.

        -307 Temporary Redirect
        臨時重定向,該狀態碼與302和303的有著類似的含義,不同之處在於,307狀態碼並不會指定客戶端要用什麼樣的請求方法請求重定向地址.
        (302指定使用原有請求方法,303指定使用GET方法)

    4XX Client Error
        4XX的響應結果表明客戶端是發生錯誤的原因所在
        -400 Bad Request
        表示該請求報文中存在語法錯誤,導致伺服器無法理解該請求。客戶端需要修改請求的內容後再次傳送請求。

        -401 Unauthorized
        該狀態碼錶示傳送的請求需要有通過HTTP認證(Basic認證,Digest認證)的認證資訊。返回含有401的響應,必須在頭部包含WWW-Authenticate以指明伺服器需要哪種方式的認證。
        當客戶端再次請求該資源的時候,需要在請求頭中的Authorization包含認證資訊。
        更多關於認證授權的資訊關注RFC2617

        -403 Forbidden
        該狀態碼錶明對請求資源的訪問被伺服器拒絕了。伺服器沒有必要給出拒絕的詳細理由,但如果想做說明的話,可以在實體的主體部分原因進行描述,這樣就能讓使用者看到了。
        未獲得檔案系統的訪問許可權,訪問許可權出現某些問題,從未授權的傳送源IP地址試圖訪問等情況都可能發生403響應。

        -404 Not Found
        該狀態碼錶明伺服器上無法找到指定的資源。通常被用於伺服器不想透露拒絕請求的原因,或者沒有其他的響應可提供。

    5XX Server Error
        5XX的響應結果表明伺服器本身發生錯誤,或者沒有足夠的能力來處理請求。
        -500 Internal Server Error
        該狀態碼錶明伺服器端在執行請求時發生了錯誤。也有可能是Web應用存在的BUG或某些臨時的故障。

        -503 Service Unavailable
        該狀態碼錶明伺服器暫時處於超負載或正在進行停機維護,現在無法處理請求。如果事先得知解除以上需要的時間,最好寫入Retry-After首部欄位再返回給客戶端。