探索HTTP之旅

語言: CN / TW / HK

1. 什麼是HTTP?

探索HTTP首先要知道什麼是HTTP?

http是一個簡單的請求-響應協議,它通常執行在TCP之上。它指定了客戶端可能傳送給伺服器什麼樣的訊息以及得到什麼樣的響應。請求和響應訊息的頭以ASCII碼形式給出;而訊息內容則具有一個類似MIME的格式。這個簡單模型是早期Web成功的有功之臣,因為它使開發和部署非常地直截了當。

以上來自百度百科。

從百度百科中我們也可以知道HTTP是一個協議,並且是執行在TCP之上的(如果不知道什麼是TCP可以看上一篇)。那麼既然知道了是個協議,協議的理解就是雙方交流的一種規定,規定雙方交流時可以通過設定的協議進行交流,那麼HTTP協議就是客戶端與服務端進行交流的一種規定。

  • HTTP協議規定了雙方可以實現的操作,例如GET、POST、PUT、DELETE.....,通過這些操作客戶端可以對服務端的資源進行獲取以及修改等;

  • HTTP協議還規定了客戶端向服務端請求的方式,必須以http或者https為開頭,比如http://www.baidu.com/,這樣服務端才能識別這是一個HTTP請求,並且讀取該請求執行響應操作;第三HTTP協議還規定了如何在URL中獲取指定資源,比如我要檢視伺服器中的某個頁面,http://www.baidu.com/通過這樣http://ip:port/path/....的方式實現對伺服器中某個資源的獲取。

  • 最後HTTP協議也規定了雙方的響應訊息以及狀態碼,可以理解為服務端執行了客戶端的請求得到響應結果,伺服器將響應結果返回給客戶端,客戶端收到響應結果,可以解析響應結果然後展示。響應結果中又包含了具體資料以及狀態碼等資訊。狀態碼平時使用的比如200、404、400、500等都是一種狀態碼的規約,客戶端可以根據這些狀態碼判斷客戶端收到請求後的執行狀態,是否成功,以及是否異常等資訊。

以上就是對HTTP協議的一種理解,總結為:客戶端與伺服器通過這樣的一種協議實現了彼此之間的通訊,客戶端傳送的請求服務端可以解析並執行響應的操作,最後將得到的結果返回給客戶端,客戶端收到響應訊息並解析展示。

2. 瀏覽器請求資料的過程?

說完了HTTP協議,知道了HTTP協議是什麼,那麼就開始探索平時發一個HTTP請求到底會經過怎樣的一個過程,看看HTTP之旅到底是不是很玄幻?

2.1 瀏覽器解析URL

探索第一站,瀏覽器站

第一站就是在我們發請求的瀏覽器,學過計算機網路的都知道,在網際網路中尋找一個主機都是通過IP來尋找的,那麼在網路層中路由器只能通過IP來尋找目的主機,那麼我們如果輸入www.baidu.com,路由器咋知道在哪個伺服器,所以我們要在瀏覽器將www.baidu.com翻譯一下,翻譯成計算機網路中可以識別的地址,也就是IP。

瀏覽器中通過DNS伺服器將我們輸入的域名解析成計算機網路中可以識別的IP地址(如果你瀏覽器輸入的是ip這裡就當我沒說直接跳到下一站。)

2.2 封裝HTTP資料包

探索第二站,封裝HTTP資料包站

封裝HTTP資料包,首先知道什麼是HTTP資料包,HTTP資料包由請求行、請求頭部、空行和請求資料四部分組成。

請求行分為三部分:請求方法、請求地址和協議版本

  • 請求方法:HTTP1.1定義的請求方法有八個GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE

  • 請求地址:也就是第一站解析到的地址它是由**<協議>://<主機>:<埠>/<路徑>**組成

  • 協議版本:也就是HTTP版本

請求頭部就是我們開啟瀏覽器檢視Network中的檢視到的RequestHeader。

請求資料呢就是我們傳送的資料了。

所以這一站的總結就是將協議中需要的HTTP資料封裝到我們請求中,然後到下一站。總結一句話對什麼進行怎樣的操作!

2.3 封裝TCP資料包

探索第三站,封裝TCP資料包站

上一站已經封裝好了HTTP資料包那麼能請求了嗎?答案是不能,因為這時候才進入到網路中,那麼進入到網路中就要經過傳輸層,在傳輸層中TCP就要起作用了。TCP登場!

封裝TCP資料包,到底封裝的是什麼呢?如果知道TCP的就知道其實封裝了TCP首部,在傳輸層需要對資料進行封裝TCP首部,在TCP首部中包含了我要傳送給伺服器的各種資訊,比如源埠、目睹埠、確認號、順序號等等。可以看我另一篇文章詳細分析計算機網路中的傳輸層

這一站就到了傳輸層中,在傳輸層中被進行了TCP封裝,攜帶著網路中需要的各種資訊進入下一站。

2.4 建立TCP連線

探索第四站,建立TCP連線站

這一戰就是建立連線的過程,因為上一站才封裝好各種資料資訊,但是客戶端與服務端還沒有連線呢,這一站就是將雙方建立連線。既然建立連線那麼就需要通過兩種協議TCP和UDP,但是UDP不是面向連線的,所以呢我們就需要建立雙方之間的TCP連線,也就是最熟悉的三次握手。具體的過程可以看我上一篇文章有具體的過程。

所以這一戰就是建立連線的過程,這裡依賴於傳輸層中的TCP建立連線,通過三次握手實現客戶端與服務端的連線。

2.5 客戶端傳送請求

探索第五站,傳送站

到了這裡資料都封裝好了,連線也建立好了,客戶端終於可以傳送請求了,這時候客戶端就可以傳送自己的HTTP請求了,因為彼此已經建立連線了所以客戶端傳送請求服務端也可以收到請求。

客戶端傳送了HTTP請求,就等著響應就好了,剩下的事就是服務端去做了。

2.6 服務端響應

探索第六站,服務端響應站

這一站就是服務端的事情了,伺服器接收到客戶端的請求,根據請求對相應資源執行客戶端請求中的操作,客戶端執行結束得到響應資料,然後服務端將響應資料返回給客戶端,響應資料包含客戶端想要的資料以及狀態碼

這一站的總結就是服務端對客戶端請求的資源執行get、post.....操作,得到響應資料返回給客戶端。

2.7 客戶端接收響應訊息執行渲染

探索第六站,客戶端接收響應訊息站

客戶端又登場了,服務端返回訊息了,客戶端要起來處理了,為啥要處理響應訊息呢?舉個🌰:

如果服務端返回了一個網頁,如果不對這個網頁做渲染,結果就是頁面在瀏覽器展示是亂七八糟的,那麼正常人怎麼受得了,所以瀏覽器很負責的渲染好展示給我們。

這一站總結就是瀏覽器收到響應訊息渲染最後展示給使用者!

2.8 伺服器關閉TCP連線

探索🏁站,關閉站

客戶端與服務端都完成了彼此的任務,互動也結束了那麼這個前面建立的TCP連線也可以關閉了,不然浪費資源啊,資源在計算機中是很寶貴的東西!

到這裡整個從瀏覽器請求資料的全過程就結束了🔚,當然了這其中涉及到更細節的一些問題比如物理層、資料鏈路層、網路層等沒有具體細說,這些知識還是後續再寫吧!

到這裡本該結束,那麼瞭解了HTTP順便了解下HTTPS吧!

3. 什麼是HTTPS?

為什麼我們有了HTTP還要用HTTPS呢?你會說提高安全性,那麼為什麼HTTP不安全呢?

這裡我自己的一個淺顯的理解就是HTTP對於資料都是明文傳輸,那麼如果傳輸過程中資料包被劫持那麼就可以通過資料包做一些bad things!所以這就需要HTTPS來保證安全性了!

HTTPS在HTTP基礎上加入SSL協議,SSL協議依靠證書來驗證伺服器的身份,並對傳輸的資料進行加密,保障資料的安全性。這個過程大致為:傳送HTTPS請求、得到返回證書、對證書驗證、金鑰交換、資料傳輸。