標籤:

你知道你的HTTP請求有多辛苦嗎?


HTTP請求與響應

前言:

作為一名合格的前端,每天會應對無數的網路請求。

所以,了解這些網路底層是怎麼從源發送過來的,接收源的又是如何處理的,對你的工作中的調試是有質的提升的。

剛好最近希望系統的學習下,就選擇了工作中較常見的HTTP請求與響應。

有錯誤的可以通過搜索公眾號:"強仔說前端"的聯繫方式聯繫我,希望各路大神能不吝賜教。


背景:

互聯網上相關聯的協議,集合起來可以有個叫法叫「TCP/IP協議族」。

我們只要了解其中的HTTP協議,就很夠用了。

那這個協議族裡有個比較重要的點,就是分層。

從上往下分呢,分別是應用層,傳輸層,網路層和網路數據鏈路層。

等等閱讀時可以參考"TCP/IP參考模型"圖來理解。


TCP/IP參考模型:


目錄:

  • 應用層
  • 傳輸層
  • 網路層
  • 鏈路層

HTTP請求:

  1. 應用層:

    該層里包含很多常見的協議,如ftp協議,smtp協議,還有本篇主角HTTP協議。

    當一個HTTP請求被發出時,通常是由發送方(客戶端)發起,那麼此時是到達了"TCP/IP參考模型"中的應用層的。

    其中起作用的是HTTP協議,該協議生成了針對目標(也就是接收方伺服器)的HTTP請求報文(包含了請求行,請求頭部,有時還帶有請求體,具體見下一篇詳細的解釋),並發往下一層。

    注意,這時候的報文還是完整的。

    小結: 應用層是用來生成報文的。
  2. 傳輸層:

    當HTTP請求穿過應用層後,就是到達了傳輸層了。該層內主要作用是將應用層中的HTTP協議帶來的完整報文進行處理,然後再傳輸。

    其中,為了傳輸方便,TCP協議將應用層的HTTP協議帶來的一串完整的請求報文,按序號分割成多個報文段,並在各個報文上打上標記序號以及埠號,形成IP數據包,最後再將一個個處理完的報文片段傳輸給網路層進行定位解析,為發送做準備。

    注意,這時候是片段了。

    小結: 傳輸層是用來切割報文的。
  3. 網路層(IP層):

    這裡的網路,並不是我們平時理解的網路信號的網路,這裡指的是一種結構模型層。
  • 首先,要先解釋下其中兩個難點區分,就是IP地址和MAC地址。
  • IP地址是Internet協議地址,是邏輯地址,也就是抽象的,是每個Internet包給的,動態的,可以不同的。
  • 而MAC地址卻是物理地址,也就是實際存在的,由設備的網卡提供的,而且一般不能改變的,也就是固定的了。
  • 通俗地講,IP地址可以理解為你家門牌號,而MAC地址相當於你個人身份證。
  • 兩者並沒有必然關係。

當到達網路層後,這時候才是整個「TCP/IP參考模型」結構體系的關鍵,因為它決定了發往哪裡去,按什麼順序發。

其底層使用的就是網際網路協議,也就是IP協議(如果你想聯網)。

它將客戶端和伺服器端這兩端通過路由作為橋樑,IP協議作為通信工具,連接起來進行通信。

其中,路由的作用就是:為接收到的處理好的請求報文(也就是數據包)找到相對應的目的主機(接收方),可以理解成指路人。

那為什麼路由就能知道接收到的報文要發往哪裡呢?

原來,該報文里就包含了目標主機的IP地址。

而IP地址含有兩個部分,一個是網路地址,一個是主機地址。

因此,通過對方的IP地址,不僅可以判斷出對方是否和本機在一個網路內,還能獲取對方主機地址。

那麼,路由處理分兩種情況,

第一,針對不需要跨網段的,也就是在區域網內:

這時候交給"交換機"處理。

這,就體現了mac地址的作用了,因為mac地址是物理地址,硬體地址,由網卡提供的,一般無法改變。

而網路層中路由藉助「ARP協議」,會將目標主機(目標伺服器)的IP地址,解析成目標主機對應的MAC地址與arp表對應,然後,告訴交換機,然後交換機會根據自己的轉發表中的mac地址和mac地址對應的埠號一一對應,然後進行轉發。如果在轉發表內找到了對應埠號,那麼恭喜,你的快遞是順豐的,交換機直接一步到位發送到目標主機;如果找不到,呵呵,你估計貪便宜,找了韻達了...它就每個埠都轉發一次,總會中一次的,很粗暴的方法,自然效率偏低了。

第二,針對需要跨網段,也就是進入網際網路了:

這時候交給網關處理。

這時候就需要使用請求報文中的IP地址,來尋找目標主機的IP位置,接著告訴網關IP地址,網關進行匹配相應的路由,然後在路由表中尋找對應的IP地址,然後根據IP地址中的網路地址,判斷是跨網還是內網,再決定要往哪個網路跳轉。

還有,路由主要使用的協議即為IP協議。所以,網路層也有別的叫法,就是IP層。

到這,你可能會有這樣的疑問?

既然有了IP地址能定位,那為什麼還要MAC地址呢?

這裡藉助知乎一個回答:

IP地址在三層中定義,具有三層意義,MAC地址在二層中定義,具備二層意義。在同一網段內,由於不需要跨三層,因此使用MAC地址定址,但是一旦跨網段(即跨越三層環境),此時則需要IP地址來定址。

這樣一來,路由發往網路的通信請求就準備齊全了,剩下就是讓下一個層發送數據了。

但是記住,網路層是不傳輸的,只是用來確定路線(定位)的,也對應了上面說的指路人。

小結: 網路層是用來定位的。

4. 鏈路層:

該層可以說是和設備,也就是物理層(OSI模型)最接近的一層了。

那麼就是說,離伺服器介面最近了。

但是呢,該層是不幹活的,為什麼呢?你有見過領導還寫業務代碼嗎?

當然,也不是啥都沒幹。

鏈路層作用中的其中作用之一就體現在檢測你這些發過來的信息到達有沒錯誤?也就是測試。

測試什麼呢?確定物理地址,源地址目的地址等問題。

當測試無誤後呢,就交給伺服器處理了。

伺服器對得到的報文進行解析處理,然後返回帶有響應數據的響應,於是,響應就開始了。

小結: 鏈路層是用來檢測數據的。

HTTP響應:

具體過程就相當於剛剛來的路,重走一次,只不過這次是倒著走了。

從鏈路層-->網路層-->傳輸層-->應用層--->就到客戶端了,通常是瀏覽器,就這樣,一次請求響應就完成了。

總結:

一次完整的HTTP請求,從發送到接收,是需要經歷: 應用層-->傳輸層-->網路層-->鏈路層,甚至到了物理層的。


下一篇,我會對一次HTTP請求中的報文進行詳細解釋,也就是說如果你想知道HTTP請求中帶了哪些東西,可以期待我下一篇文章。


個人能力有限,有錯誤的麻煩微信搜索:"強仔說前端"聯繫我(回復公眾號我就能收到),指點指點我,共同進步。


推薦閱讀:

HTTP請求
HTTP伺服器狀態碼大全解析
我知道的HTTP請求
JMeter-HTTP請求sampler詳細說明
談談 HTTP 緩存

TAG:HTTP |