前端培訓-中級階段(27)- http 2.0(2019-11-28期)

前端最基礎的就是 HTML+CSS+Javascript。掌握了這三門技術就算入門,但也僅僅是入門,如今前端開發的定義已經遠遠不止這些。前端小課堂(HTML/CSS/JS),本着提高技術水平,打牢基礎知識的中心思想,咱們開課啦(每週四)。html

什麼是 HTTP2?

HTTP2 即超文本傳輸協議 2.0。是由互聯網工程任務組(IETF)的 Hypertext Transfer Protocol Bis (httpbis)工做小組進行開發。主要是爲了優化性能,前身是 Google 的 SPDY 。是兼容 HTTP1.1的
HTTP1.1 發佈於 1999年。HTTP2 發佈於 2015年5月前端

HTTP2 更新了什麼?

  1. 二進制協議。能夠定義額外的幀內容。
  2. TCP 連接複用。(並非頗有效)
  3. HTTP/2 頭部壓縮(HPack)nginx

    1. 一份靜態表(Static Table)
      包含常見的頭部名稱,以及特別常見的頭部名稱與值的組合靜態表規則地址,能夠看到一個 POST 的請求頭能夠轉化成一個數字來表示,縮小了不少。
      image.png
    2. 一份動態表(Dynamic Table),能夠動態地添加內容
    3. 基於靜態哈夫曼碼錶的哈夫曼編碼(Huffman Coding)
  4. ALPN
    兼容性考慮(HTTP二、HTTP1.1),客戶端告訴服務端全部支持的方式,服務端選擇一個最優的來通訊。
  5. Server Push
    在 HTTP 1.1 裏,在同一個 TCP 鏈接裏面,上一個迴應(Response)發送完了,服務器才能發送下一個,但在 HTTP/2 裏,能夠將多個迴應一塊兒發送。

如何支持 HTTP2

Nginx 1.9.5+ 支持 HTTP2, 高版本的 Nginx 不支持 IE6 的 HTTPS(大家沒看錯咱們還兼容 IE6)算法

咱們能夠經過 Chrome 瀏覽器開發者工具的 Network 來查看當前請求使用的協議(Protocol 字段)
image.pngsegmentfault

HTTP一、HTTP1.一、HTTP2 比對

HTTP/1.1 vs HTTP/2瀏覽器

TCP通道複用問題

  1. HTTP/1 一個TCP連接上 只能有一個 請求/響應。
    每次瀏覽器(C)與服務端(S)完成請求處理之後,TCP 連接就會斷開
  2. HTTP/1.1 一個 TCP 連接 能夠複用 ,再完成一個能夠繼續下一個
    增長了長連接。 keep-alive 來開啓長連接。也就是說完成請求處理之後 HTTP 鏈接會維持一段時間,這樣在這段時間內若是有新的請求就可以直接傳輸而不須要再次進行 TCP 創建鏈接了。
  3. HTTP2 不須要等待,能夠發送 多個
    引入了優先級、幀(Frame)、切塊等概念。

課外話

TCP 協議經過慢啓動機制、擁塞避免機制、加速遞減機制、快重傳和快恢復機制來共同實現擁塞控制。服務器

HTTP2 與 HTTP1.1

新建了個域名,開啓了 HTTP2微信

TCP

TCP 特性:可靠(知道接收方是否已接收)。對應 UDP(不可靠)網絡

接收方未收到時,須要有重發機制。可是若是原本就是由於接收方負載太高,那麼就會形成網絡擁堵、甚至致使把接收方打掛。app

這個時候 TCP 要擁有控制流量的辦法。防止大量數據過來等待接收。

1988年,Van Jacobson 和 Michael J.Karels 撰文描述瞭解決問題的幾種算法:慢啓動擁塞預防快速重發快速恢復。這幾種算法被寫進了 TCP 規範。

TCP 擁塞窗口

當網絡的負載超過了能處理的極限時,就會形成網絡擁塞

TCP 經過動態維護窗口的大小實現以最大負載來傳輸數據。有兩種問題,網絡問題,接收方問題。

發送方維護兩個窗口:准許窗口(接收方容許的最大字節數)和擁塞窗口(Congestion Window) (發送方傳遞的字節數量)。最終發送的字節數量是兩個窗口的最小值

TCP 的慢啓動機制

當鏈接建好時,發送方將擁塞窗口初始化爲1,而後開始發送數據段。

若是數據段在定時器過時以前被確認,則將擁塞窗口的字節數翻倍(由於是翻倍,因此擁塞窗口會呈指數級增加,直到超時不被確認或者達到接收方窗口限制)。
若是數據段在定時器過時以前沒有被確認,則認爲網絡擁塞。這個時候發送的字節數會減半(閾值也會變化),這個時候還有個閾值的邏輯。

這個算法被稱爲慢啓動算法 ( Slow Start)

當 擁塞窗口 < 閾值 時,使用慢啓動算法
當 擁塞窗口 > 閾值 時,使用擁塞避免算法
當 擁塞窗口 = 閾值時,既可使用慢啓動算法,也可時使用擁塞避免算法。

擁塞避免算法

擁塞避免算法的思路是讓擁塞窗口緩慢地增大,呈線性增加,即每完成一次,擁塞窗口增長1。

微信公衆號:前端linong

clipboard.png

參考文獻

  1. 前端培訓目錄、前端培訓規劃、前端培訓計劃
  2. 深刻淺出:HTTP/2
  3. 7 Tips for Faster HTTP/2 Performance
  4. HTTP/1.1 vs HTTP/2
  5. Http/2 升級指南
  6. HTTP/2 特性
  7. Fundebug網站升級HTTP/2,真的變快了!
    很棒的工具,能夠很方便的收集生產環境的異常
  8. TCP慢啓動算法
  9. TCP協議詳解(慢啓動,流量控制,阻塞控制之類)
  10. TCP擁塞控制,慢啓動算法
  11. TCP擁塞控制機制之慢啓動
相關文章
相關標籤/搜索