【HTTP協議】HTTP報文以及返回結果的HTTP狀態碼

一,HTTP報文下的HTTP信息

1.1,HTTP報文

用於HTTP協議交互的信息被稱爲HTTP報文,客戶端的報文叫做請求報文,服務器端的報文叫做響應報文。

HTTP報文是一種很多行(由CR+LF作換行符)數據構成的字符串文本。

HTTP報文大致可分爲報文首部和報文主體,之間用空行進行分割,但是,並不一定有報文主體。

1.2 ,請求報文及響應報文的結構

請求報文:

響應報文

  

 請求報文和響應報文由以下數據組成

請求行:包含請求的方法,請求URI和HTTP版本。

狀態行:包含表明結果的狀態碼,原因短語和HTTP版本。

首部字段:包含表示請求和響應的各種條件和屬性的各類首部。一般有四種首部:通用首部,請求首部,響應首部和實體首部。

其他

1.3,利用編碼提升傳輸速率

HTTP在傳輸時進行編碼,能有效處理大量訪問請求,但是,進行編碼的操作也需要計算機完成。

1.3.1,報文主體和實體主體的差異

  • 報文

報文時HTTP通信中的基本單位,由8位字節流組成,通過HTTP協議進行傳輸

  • 實體

作爲請求或者響應的有效載荷數據被傳輸,其內容由實體首部和實體主體組成。

HTTP報文的主體用於傳輸請求或響應的實體主體。

通常情況下,報文主體等於實體主體,只有在進行編碼的時候實體主體纔會發生差異。

1.3.2 壓縮傳輸的內容編碼

內容編碼指明應用在實體內容上的編碼格式,並保持實體信息原樣壓縮,內容編碼後的實體由客戶端接受並負責解碼。

1.3.3,分割發送的分塊傳輸編碼

在HTTP 通信過程中,請求的資源過大,在沒有請求完成之前,瀏覽器無法顯示請求頁面,我們就需要進行分塊處理,讓瀏覽器逐步顯示頁面。這種編碼形式就是分塊傳輸編碼。

分塊傳輸編碼會將主體分爲很多塊,每一塊都用16進制去標記塊的大小,而實體的最後一塊使用0“CR+LF”進行標記。

然會客戶端進行解碼,恢復到編碼之前的實體。

在HTTP/1.1中存在一種稱爲傳輸編碼的機制,它可以在通信時按照某種編碼進行傳輸,但是隻定義作爲分塊傳輸編碼中。

 1.4,發送多種數據的多部分對象集合

HTTP協議也採納了多部分對象集合,發送的一份報文包含多類型實體。通常在圖片和文本文件等上傳時使用。

 

1.5 ,獲取部分內容的範圍請求

如果你下載一個圖片下載到一半的時候,突然斷網了,你再進行下載就會從最開始進行下載,爲了解決這種機制就需要一種可以恢復的機制,就是從上次斷開的地方重新進行下載。

要實現該功能需要指定下載的實體範圍,這就是範圍請求。

對一份1-10000字節大小的資源,如果使用範圍請求可以只請求5001-10000字節的內容。

執行請求時,會用到首部字段Range字段來指定byte範圍。

 

 1.6,進行內容協商返回最合適的內容

當瀏覽器的版本是英文或者中文的時候,訪問相同的URI網站的WEB頁面時,則會顯示對應的英語或中文版本,這種機制就是內容協商。

內容協商就是客戶端和服務器端就響應的資源進行交涉,然後提供給客戶端最合適的資源。內容協商會以響應資源的語言,字符集,編碼方式等作爲判斷的基準。

包含在報文中的首部字段就是判斷的基準。

內容協商技術有以下三種類型:

  • 服務器驅動協商

由服務器端進行內容協商。以請求首部字段作爲參考,在服務器端自動處理。但是對用戶來說,以瀏覽器發送的信息作爲判定的依據,但是不一定篩選出最優的內容。

  • 客戶端驅動協商

由客戶端進行內容協商的方式,用戶從瀏覽器的可選項列表中進行手動選擇。

  • 透明協商

共同進行決定,由服務器端和客戶端各自進行協商的一種寫法。

二,HTTP狀態碼

2.1,狀態碼告知

狀態碼的職責就是描述返回的結果,通過結果用戶就可以指導是否請求成功。

狀態碼的類別

 

 2.2 2XX 成功

2.2.1 200 ok

 表示客戶端發送的消息被服務器端正常處理了。

在響應報文中,響應信息隨着方法的不同會發生改變,使用GET方法會返回對應的請求資源實體,而使用HEAD方法,就不會返回實體。

2.2.2 204 NOT FOUND

 該狀態碼錶示客戶端請求處理成功,但是在返回的響應報文中不含實體的主體部分。

這個狀態多出現在客戶端向服務器發送信息,而服務器端不進行信息返回。

2.2.3 206 Partial Content

 表示客戶端進行範圍請求,而服務器成功執行這部分的GET請求。響應報文中包含Content-Range指定範圍的實體內容。

2.3,3xx重定向

2.3.1 moved Permanently

永久性重定向 。表示請求的資源被分配到新的URI上,以後應使用資源現在所使用的URI,

2.3.2,302 Found

臨時性重定向。表示資源分配到了新的URI上,希望用戶本次使用新的URI訪問。

302和301相比:302代表的資源 不是被永久移動,只是臨時性質的,換句話說,已經移動的資源對應的URI將來還有可能改變。

2.3.3,303 SeeOther

該狀態碼錶示由於請求對應的資源存在着另一個URI,應使用GET方法定向獲取請求的資源。

302和303相同,但是303指明必須使用GET獲取資源。

 

 2.3.4,not modified

 表示客戶端發送附帶條件的請求時,服務器端允許請求訪問資源,但沒有滿足時返回。

2.3.5 307 Temporary Redirect

臨時重定向

4.4,客戶端發生錯誤

4.4.1 400Bad Request

 

表示請求報文中存在語法錯誤。

4.4.2 401 Unauthorized

 

表示發出的請求需要進行HTTP認證的認證信息,如果之前進行過1次請求,則表示認證失敗。

4.4.3 403 Forbidden

 

 表示請求的資源禁止訪問。

4.4.4 404 not found

表示服務器上沒有訪問的資源。或者服務器拒絕請求時進行說明。

2.5 5XX服務器錯誤

2.5.1,500 Internet server Error

 

表示服務器執行請求時發生了錯誤。

2.5.2 503 Service Unavailable

 

表示服務器現在處於超負荷或者進行停機維護,現在無法處理請求。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章