1. 程式人生 > >HTTP 2.0

HTTP 2.0

HTTP 1.1 在應用層以純文字的形式進行通訊,HTTP1.1雖然它是個長連線,但在連線中傳送的多個請求還是會順序處理。這樣的話一旦有一個請求處理很久的話,那後面的請求就會被阻塞,在實時性、併發性上都存在問題。

為了解決這些問題,HTTP 2.0 會對 HTTP 的頭進行一定的壓縮,將原來每次都要攜帶的大量 key value 在兩端建立一個索引表,對相同的頭只發送索引表中的索引。

此外,HTTP 2.0 協議將一個 TCP 的連線中,切分成多個流,每個流都有自己的ID,而且流可以是客戶端發往服務端,也可以是服務端發往客戶端。它其實只是一個虛擬的通道。流是有優先順序的。

HTTP 2.0 還將所有的傳輸資訊分割為更小的訊息和幀,並對它們採用二進位制格式編碼。常見的幀有Header

幀,用於 Header 內容,並且會開啟一個新的流。再就是Data幀 ,用來傳輸正文實體。多個Data幀屬於同一個流。

通過這兩種機制,HTTP 2.0 的客戶端可以將多個請求分到不同的流中,然後將請求內容拆成幀,進行二進位制傳輸。這些幀可以打散亂序傳送,然後根據每個幀首部的流識別符號重新組裝,並且可以根據優先順序,決定優先處理哪個流的資料。

一個頁面要傳送三個獨立的請求,一個獲取CSS,一個獲取JS,一個獲取圖片JPG。如果使用 HTTP 1.1就是序列的,但是如果使用 HTTP 2.0 ,就可以在一個連線裡,客戶端和服務端都可以同時傳送多個請求或迴應,而且不用按照順序一對一對應。

HTTP 2.0 其實將三個請求變成三個流,將資料分成幀,亂序傳送到一個 TCP 連線中。 

HTTP 2.0 成功解決了 HTTP 1.1 的隊首阻塞問題,同時,也不需要通過 HTTP 1.x 的 pipeline 機制用多條 TCP 連線來實現並行請求與響應;減少了 TCP 連線數對伺服器效能的影響,同時將頁面的多個數據 CSS、JS、JPG等通過一個數據連結進行傳輸,能夠加快頁面元件的傳輸速度。