友快網

導航選單

一文帶你瞭解什麼是HTTP協議

前言

網路是由若干節點和連線這些節點的鏈路構成,然後網路與網路之間所串連成的龐大網路叫做網際網路,而我們今天要講的HTTP(HyperText Transfer Protocol 超文字傳輸協議)是網際網路上應用最為廣泛的一種網路協議,它是由全球資訊網協會(World Wide Web Consortium)制定釋出。

一、簡介

HTTP 協議一共有五大特點:

1。支援客戶/伺服器模式。

2。簡單快速:

客戶向伺服器請求服務時,只需傳送請求方法和路徑。

3。靈活:

HTTP允許傳輸任意型別的資料物件。

正在傳輸的型別由Content-Type(Content-Type是HTTP包中用來表示內容型別的標識)加以標記。

4。無連線:

無連線的含義是限制每次連線只處理一個請求。

伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。

採用這種方式可以節省傳輸時間。

5。無狀態:

無狀態是指協議對於事務處理沒有記憶能力,伺服器不知道客戶端是什麼狀態。

即我們給伺服器傳送 HTTP 請求之後,伺服器根據請求,會給我們傳送資料過來,但是,傳送完,不會記錄任何資訊(Cookie和Session孕育而生)。

二、TCP/IP協議

HTTP是一個基於TCP/IP協議簇來傳遞資料,包含四層模型。

從上圖我們可以清晰的看到HTTP使用的傳輸層協議為TCP協議,而網路層使用的是IP協議(當然還使用了很多其他協議),所以說HTTP是一個基於TCP/IP協議簇來傳遞資料。那TCP/IP協議簇大致是如何工作的,我們再來看看下圖:

我們可以看到在資料傳送端是一層一層封裝資料,資料接收端一層一層拆封,最後應用層獲得資料。

三、建立TCP連線

我們知道了TCP/IP協議簇大致的工作原理之後,我們來看看HTTP是如何建立連線的。

1。TCP包頭資訊前面咱們講過HTTP是一個基於TCP/IP協議簇來傳遞資料,所以這HTTP建立連線也就是建立TCP連線,TCP如何建立連線,一起來看看TCP包資訊結構吧。

TCP報文包=TCP頭資訊+TCP資料體,而在TCP頭資訊中包含了6種控制位(上圖紅色框中),這六種標誌位就代表著TCP連線的狀態:

1。URG:

緊急資料(urgent data)—-這是一條緊急資訊

2。ACK:

確認已收到

3。PSH:

提示接收端應用程式應該立即從tcp接收緩衝區中讀走資料

4。RST:

表示要求對方重新建立連線

5。SYN:

表示請求建立一個連線

6。FIN:

表示通知對方本端要關閉連線了

2。建立連線過程瞭解了TCP包頭資訊之後,我們就可以正式看看TCP建立連線的三次握手了。

三次握手講解:

1。客戶端傳送位碼為syn=1,隨機產生seq number=1234567的資料包到伺服器,伺服器由SYN=1知道客戶端要求建立聯機(客戶端:

我要連線你)

2。伺服器收到請求後要確認聯機資訊,向A傳送ack number=(客戶端的seq+1),syn=1,ack=1,隨機產生seq=7654321的包(伺服器:

好的,你來連吧)

3。客戶端收到後檢查ack number是否正確,即第一次傳送的seq number+1,以及位碼ack是否為1,若正確,客戶端會再發送ack number=(伺服器的seq+1),ack=1,伺服器收到後確認seq值與ack=1則連線建立成功。(客戶端:好的,我來了)

面試官:為什麼http建立連線需要三次握手,不是兩次或四次

答:三次是最少的安全次數,兩次不安全,四次浪費資源

四、客戶端請求

客戶端與伺服器連線上了之後,客戶端就可以開始向伺服器請求資源,就可以開始傳送HTTP請求了。

1。HTTP請求報文結構我們之前說過TCP報文包=TCP頭資訊+TCP資料體,TCP頭資訊我們已經講了,現在來講TCP資料體,也就是我們的HTTP請求報文。

2。HTTP請求例項來看看實際的HTTP請求例子:

1。①是請求方法,HTTP/1。1 定義的請求方法有8種:

GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE,最常的兩種GET和POST,如果是RESTful介面的話一般會用到GET、POST、DELETE、PUT

2。②為請求對應的URL地址,它和報文頭的Host屬性組成完整的請求URL

3。③是協議名稱及版本號

4。④是HTTP的報文頭,報文頭包含若干個屬性,格式為“屬性名:屬性值”,服務端據此獲取客戶端的資訊

5。⑤是報文體,它將一個頁面表單中的元件值透過param1=value1¶m2=value2的鍵值對形式編碼成一個格式化串,它承載多個請求引數的資料。

不但報文體可以傳遞請求引數,請求URL也可以透過類似於“/chapter15/user。html? param1=value1¶m2=value2”的方式傳遞請求引數。

請求頭引數非常多,這裡就不一一說明,只說明兩個低階的反扒引數:

1。User-Agent:

客戶端使用的作業系統和瀏覽器的名稱和版本,有些網站會限制請求瀏覽器

2。Referer:

先前網頁的地址,表示此請求來自哪裡,有些網站會限制請求來源

五、服務端響應

伺服器在收到客戶端請求處理完需要響應並返回給客戶端,而HTTP響應報文結構與請求結構體一致。

1。HTTP響應報文結構

2。HTTP響應例項

3。響應狀態碼響應報文中我們重點關注下:伺服器的響應狀態碼,面試也很容易問到,下面只列出分類,詳細狀態碼請自行上網查找了解。

六、斷開連線

在伺服器響應完畢後,一次會話就結束了,請問這時候連線會斷開嗎?

1。長短連線

是否斷開我們需要區分HTTP版本:

(1)在HTTP/1。0版本的時候,客戶端與伺服器完成一個請求/響應之後,會將之前建立的TCP連線斷開,下次請求的時候又要重新建立TCP連線,這也被稱為短連線

(2)在HTTP1。0釋出僅半年後(1997年1月),HTTP/1。1版本釋出並帶來一個新的功能:

在客戶端與伺服器完成一次請求/響應之後,允許不斷開TCP連線,這意味著下次請求就直接使用這個TCP連線而不再需要重新握手建立新連線,這也被稱為長連線

注意:長連線是指一次TCP連線允許多次HTTP會話,HTTP永遠都是一次請求/響應,會話結束,HTTP本身不存在長連線之說。

早在1999年HTTP1。1就推廣普及,所以現在瀏覽器在請求時請求頭中都會攜帶一個引數:Connection:keep-alive,這表示瀏覽器要求與伺服器建立長連線,而伺服器也可以設定是否願意建立長連線,如果是close,表示已關閉。

2。長連線優缺點

對於伺服器來說建立長連線有優點也有缺點:

優點:

當網站中有大量靜態資源(圖片、css、js等)就可以開啟長連線,這也幾張圖片就可以透過一次TCP連線傳送。

缺點:

當客戶端請求一次時候不在請求,而伺服器卻開著長連線資源被佔用著,這是嚴重浪費資源。

所以是否開啟長連線,長連線時間都需要根據網站自身來合理設定。

ps:大家不要小看這一個TCP連線,在一次客戶端HTTP完整的請求中(DNS定址、建立TCP連線、請求、等待、解析網頁、斷開TCP連線)建立TCP連線佔用的時間比還是很大的。

3。斷開連線過程在建立TCP連線時是三次握手,而斷開TCP連線是四次揮手。

ps:http還有兩個很大的缺點就是明文且不能保證完整性,所以目前會漸漸被HTTPS代替。

上一篇:每日科普:趣味冷知識分享(十)快來漲知識吧!
下一篇:三星6000mAh新機上線,25W快充、6.4寸AMOLED,有點香