1. 程式人生 > 其它 >HTTP協議 學習筆記一

HTTP協議 學習筆記一

  在我們簡單瞭解WEB的發展歷史之後,發現整個WEB的都在圍繞著各種網路協議。其中比較突出的應該屬HTTP 協議。

一、什麼是HTTP協議

  HTTP協議的全稱為超文字傳輸協議(HyperText Transfer Protocol),它最早是由CERN(歐洲核子研究組織)的蒂姆 • 伯納斯 - 李(Tim BernersLee)博士提出的,目的是為了能讓遠隔兩地的人們能進行資訊交流(超文字也就是HTML)。

二、HTTP協議的發展歷史

各階段的區別:

  http/0.9:比較簡單隻能傳輸html,僅支援get請求,也沒有響應碼和響應訊息。

  http/1.0:短連線(每一個請求建立一個TCP連線,請求完成後立馬斷開連線。這將會導致2個問題:連線無法複用,head of line blocking連線無法複用會導致每次請求都經歷三次握手和慢啟動。三次握手在高延遲的場景下影響較明顯,慢啟動則對檔案類大請求影響較大。head of line blocking會導致頻寬無法被充分利用,以及後續健康請求被阻塞。)

  http/1.1:增加了長連線(通過http pipelining實現。多個http 請求可以複用一個TCP連線,伺服器端按照FIFO原則來處理不同的Request);增加connection header(該header用來說明客戶端與伺服器端TCP的連線方式,若connection為close則使用短連線,若connection為keep-alive則使用長連線);增加身份認證;增加狀態管理;增加Cache快取等機制相關的請求頭和響應頭;增加Host header。

  http/2.0:增加多路複用,伺服器推送。

三、通過TCP/IP協議族來了解HTTP

  HTTP是TCP/IP協議族的子集,想要理解HTTP協議應該先了解TCP/IP協議族。TCP/IP協議族是網路傳輸過程中各種協議的集合。

TCP/IP協議族採用分層管理,可以分為四層:應用層、傳輸層、網路層、鏈路層。利用 TCP/IP 協議族進行網路通訊時,會通過分層順序與對方進行通訊。客戶端從應用層往下走,伺服器則往鏈路層往上走。(圖片來源於《圖解http》)

  以HTTP協議通訊為例:首先,我們開啟一個想看web應用,瀏覽器通過HTTP協議傳送請求,傳輸層將應用層傳遞下來的資料(HTTP請求報文)進行分割,並在各個報文上打上標記序號及埠號後轉發給網路層。在網路層(IP 協議),增加作為通訊目的地的 MAC 地址後轉發給鏈路層。伺服器在鏈路層接收到資料,按序往上層傳送,一直到應用層,然後我們的瀏覽器就能接收到響應的資訊。

  客戶端在層與層之間傳輸資料時,每經過一層時必定會被打上一個該層所屬的首部資訊。反之,伺服器端在層與層傳輸資料時,每經過一層時會把對應的首部消去。(圖片來源於《圖解http》)

  HTTP協議之所以能夠準確無誤進行資訊傳遞,是依靠傳輸層的TCP協議。客戶端和伺服器通過TCP協議三次握手進行連線,四次揮手斷開連線。傳送端首先發送一個帶 SYN 標誌的資料包給對方。接收端收到後,回傳一個帶有 SYN/ACK 標誌的資料包以示傳達確認資訊。最後,傳送端再回傳一個帶 ACK 標誌的資料包,代表“握手”結束。 (圖片來源於《圖解http》)