什么是 http?什么是 http2?說下 http 和 http2 的工作流程?


什么是 http?

超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最廣泛的一種網絡協議。所有的 www 文件都必須遵守這個標准。設計 HTTP 最初的目的是為了提供一種發布和接收 HTML 頁面的方法。

什么是 http2?

HTTP2 的優勢,采用二進制協議:

  • 頭部壓縮:HTTP2 消息頭采用 HPACK 格式進行壓縮傳輸,並對消息頭建立索引表,相同的消息頭只發送索引號,從而提高效率和速度。

  • 多路復用:在 HTTP2 中,不用按照次序 一 一 對應,而且並發的多個請求或響應中任何一個請求阻塞了不會影響其他的請求或者響應,這樣就避免了"隊頭阻塞"

  • 服務器推送:在 HTTP2 中服務器未經請求可以主動給客戶推送資源,大大提高了網頁加載的速度

  • 安全:HTTPS 將是未來的趨勢,HTTP2 基於 HTTPS 也是未來的趨勢,安全也是 HTTP2 的重要特性之一

http 與 http2 的工作流程

http 的工作流程

每個萬維網的網點都有一個服務器進程,它不斷的監聽 TCP 端口 80,以便發現是否有瀏覽器向它發出監聽請求,一旦監聽到連接建立請求,就通過三次握手建立 TCP 連接,然后瀏覽器就會向服務器發出瀏覽某個頁面的請求,服務器接着返回所請求的頁面作為響應,然后 TCP 連接就被釋放了。

用戶 <=====> 服務器

  • http 使用 TCP 連接

  • 建立 TCP 連接

  • 用戶發送 http 請求

  • 服務器響應 http 請求

  • 釋放 TCP 連接

這些響應和請求報文都遵循一定的格式,這就是 HTTP 協議所規定的。

http2 的工作流程

http2 協議是一個二進制協議,二進制更易於 frame(幀 數據包)的實現,http2 有幾個不同 frame 定義,其中兩個最基礎的對應於 HTTP1.1 的---Data 數據和 HEADE 頭部

  • frame 是包含幾個部分:類型 Type,長度 Length,標記 Flags,流標識 Stream 和 frame payload 有效載荷

  • 流標識是描述二進制 frame 的格式,使得每個 frame 能夠基於 http2 發送,與流標識聯系的是一個流,每個流都是一個邏輯聯系,一個獨立的雙向的 frame 存在於客戶端和服務器端之間的 http2 連接中。一個 http2 連接上可包含多個並發打開的流,這個並發流的數量能夠由客戶端設置,這些流可能是打散了通過物理連接傳輸。

頭部壓縮

HTTP 是一個無態協議,也就是說,每個請求必須攜帶更多細節,以便服務器能夠識別從而服務這個請求,這些都無需服務器自己保存太多信息以及先前請求的元數據信息,HTTP2 沒有改變這個范式。但是這種方式會產生重復信息,當一個客戶端向相同服務器請求許多資源時,像來自同一個網頁的圖像,將會有大量的請求看上幾乎同樣的,這就需要壓縮技術對付這種幾乎相同的信息。HTTPS 和 SPDY 的壓縮被發現容易導致 BREACH4 和 CRIME 攻擊。因此壓縮不是一個簡單的課題,HPACK6 是 HTTP/2 的頭部壓縮。

隨時復位

HTTP1.1 一個缺點就是當 HTTP 信息有一定長度大小數據傳輸時,你不能方便地隨時停止它,中斷 TCP 連接的代價是昂貴的。使用 HTTP2 的 RST_STREAM 將能方便停止一個信息傳輸,啟動新的信息,在不中斷連接的情況下提高帶寬利用效率。

服務器端推

客戶端請求一個資源 X,服務器端判斷也許客戶端還需要資源 z,在無需事先詢問客戶端情況下將資源 z 推送到客戶端,客戶端接收到后,可以緩存起來已備后用。

流程控制

HTTP2 的每個獨立流都有自己的流程控制 flow controller,每個流兩端都必須告訴對方自己有更多空間適合數據存放,另外一端只能允許發送更多數據直至流 flow 窗口被擴展,類似 SSH 工作風格,只有 DATA frame 是流程控制的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM