Web容器(一):HTTP協議

本文參照:極客時間-《深入拆解 Tomcat & Jetty》-02 | HTTP協議必知必會

HTTP協議

HTTP本質

HTTP協議是瀏覽器與服務器之間的數據傳送協議。作爲應用層協議,HTTP是基於TCP/IP協議來傳遞數據的(HTML文件、圖片、查詢結果等),HTTP協議不涉及數據包(Packet)傳輸,主要規定了客戶端和服務器之間的通信格式。

下面我通過一個例子來告訴你HTTP的本質是什麼。

假如瀏覽器需要從遠程HTTP服務器獲取一個HTML文本,在這個過程中,瀏覽器實際上要做兩件事情。

  • 與服務器建立Socket連接。
  • 生成請求數據並通過Socket發送出去。

第一步比較容易理解,瀏覽器從地址欄獲取用戶輸入的網址和端口,去連接遠端的服務器,這樣就能通信了。

我們重點來看第二步,這個請求數據到底長什麼樣呢?都請求些什麼內容呢?或者換句話說,瀏覽器需要告訴服務端什麼信息呢?

首先最基本的是,你要讓服務端知道你的意圖,你是想獲取內容還是提交內容;其次你需要告訴服務端你想要哪個內容。那麼要把這些信息以一種什麼樣的格式放到請求裏去呢?這就是HTTP協議要解決的問題。也就是說,HTTP協議的本質就是一種瀏覽器與服務器之間約定好的通信格式。

HTTP工作原理

在這裏插入圖片描述

  1. 用戶通過瀏覽器進行了一個操作,比如輸入網址並回車,或者是點擊鏈接,接着瀏覽器獲取了這個事件。
  2. 瀏覽器向服務端發出TCP連接請求。
  3. 服務程序接受瀏覽器的連接請求,並經過TCP三次握手建立連接。
  4. 瀏覽器將請求數據打包成一個HTTP協議格式的數據包。
  5. 瀏覽器將該數據包推入網絡,數據包經過網絡傳輸,最終達到端服務程序。
  6. 服務端程序拿到這個數據包後,同樣以HTTP協議格式解包,獲取到客戶端的意圖。
  7. 得知客戶端意圖後進行處理,比如提供靜態文件或者調用服務端程序獲得動態結果。
  8. 服務器將響應結果(可能是HTML或者圖片等)按照HTTP協議格式打包。
  9. 服務器將響應數據包推入網絡,數據包經過網絡傳輸最終達到到瀏覽器。
  10. 瀏覽器拿到數據包後,以HTTP協議的格式解包,然後解析數據,假設這裏的數據是HTML。
  11. 瀏覽器將HTML文件展示在頁面上。

如上,Tomcat和Jetty作爲一個HTTP服務器,主要承擔了接受連接解析請求數據處理請求發送響應這幾個步驟。這裏請你注意,可能有成千上萬的瀏覽器同時請求同一個HTTP服務器,因此Tomcat和Jetty爲了提高服務的能力和併發度,往往會將自己要做的幾個事情並行化,具體來說就是使用多線程的技術。

HTTP請求響應實例

在瀏覽器和HTTP服務器之間通信的過程中,首先要將數據打包成HTTP協議的格式:
在這裏插入圖片描述
如上,HTTP請求數據由三部分組成,分別是請求行、請求報頭、請求正文。當這個HTTP請求數據到達Tomcat後,Tomcat會把HTTP請求數據字節流解析成一個Request對象,這個Request對象封裝了HTTP所有的請求信息。接着Tomcat把這個Request對象交給Web應用去處理,處理完後得到一個Response對象,Tomcat會把這個Response對象轉成HTTP格式的響應數據併發送給瀏覽器。
在這裏插入圖片描述
HTTP響應的格式,HTTP的響應也是由三部分組成,分別是狀態行、響應報頭、報文主體

Cookie和Session

cookie

session

HTTP與HTTPS

HTTP與HTML

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