keep-alive與多路複用

HTTP 1.0

在HTTP1.0版本,存在一個問題:創建的一次鏈接,只有包含一個請求響應(也就是對應一個資源)。瀏覽器

若是有多個請求,那麼效率就會很低。markdown

http1.0.png

HTTP 1.1

在HTTP 1.1 中 connection: keep-alive 是默認開啓的svn

改進一:鏈接複用

一次鏈接,能夠有多個請求響應(對應多個資源)。flex

鏈接複用.png

改進二:管線化傳輸(pipeline)

下一次的請求不須要等待上一個響應來以後再發送。url

但響應的順序是不變的,FIFO(先進先出)spa

image.png

依舊存在的問題:3d

  • 請求是按次序的,後來者須要排隊等待。
  • 請求頭大多相似,重複傳輸浪費資源。
  • 同一域名的瀏覽器有最大並行請求限制。

HTTP 2.0

多路複用

因爲 HTTP 1.X 是基於文本的,由於是文本,就致使了它必須是個總體,在傳輸是不可切割的,只能總體去傳。code

但 HTTP 2.0 是基於二進制流的。有兩個很是重要的概念,分別是幀(frame)和流(stream)orm

  • 幀表明着最小的數據單位,每一個幀會標識出該幀屬於哪一個流。
  • 流就是多個幀組成的數據流。

將 HTTP 消息分解爲獨立的幀,交錯發送,而後在另外一端從新組裝。ip

  • 並行交錯地發送多個請求,請求之間互不影響。
  • 並行交錯地發送多個響應,響應之間互不干擾。
  • 使用一個鏈接並行發送多個請求和響應。

簡單的來講: 在同一個TCP鏈接中,同一時刻能夠發送多個請求和響應,且不用按照順序一一對應。

以前是同一個鏈接只能用一次, 若是開啓了keep-alive,雖然能夠用屢次,可是同一時刻只能有一個HTTP請求。

多路複用.png

相關文章
相關標籤/搜索