HTTP/2正式發布可能會使WEB開發領域產生哪些趨勢?
微軟解釋IE中的HTTP/2協議 及其對於互聯網的意義
瀉藥,可惜我真的研究不深,拋磚引玉吧。
http2-spec/HTTP2中英對照版(06-29).md at master · fex-team/http2-spec · GitHub
Google性能工程師Ilya Grigorik談HTTP/2
然後我們一起邀請 @rank 來回答一下吧……一文帶你了解Http/2新特性——》 HTTP 2 的新特性你 get 了嗎?
一、多路復用的單一長連接
1.單一長連接
在HTTP/2中,客戶端向某個域名的伺服器請求頁面的過程中,只會創建一條TCP連接,即使這頁面可能包含上百個資源。 單一的連接應該是HTTP2的主要優勢,單一的連接能減少TCP握手帶來的時延 。HTTP2中用一條單一的長連接,避免了創建多個TCP連接帶來的網路開銷,提高了吞吐量。
2.多路復用
HTTP2雖然只有一條TCP連接,但是在邏輯上分成了很多stream。
HTTP2把要傳輸的信息分割成一個個二進位幀,首部信息會被封裝到HEADER Frame,相應的request body就放到DATA Frame,一個幀你可以看成路上的一輛車,只要給這些車編號,讓1號車都走1號門出,2號車都走2號門出,就把不同的http請求或者響應區分開來了。但是,這裡要求同一個請求或者響應的幀必須是有有序的,要保證FIFO的,但是不同的請求或者響應幀可以互相穿插。這就是HTTP2的多路復用,是不是充分利用了網路帶寬,是不是提高了並發度?
二、頭部壓縮和二進位格式
http1.x一直都是plain text,對此我只能想到一個優點,便於閱讀和debug。但是,現在很多都走https,SSL也把plain text變成了二進位,那這個優點也沒了。
於是HTTP2搞了個HPACK壓縮來壓縮頭部,減少報文大小(調試這樣的協議將需要curl這樣的工具,要進一步地分析網路數據流需要類似Wireshark的http2解析器)。
三、服務端推動Sever Push
這個功能通常被稱作「緩存推送」。主要的思想是:當一個客戶端請求資源X,而伺服器知道它很可能也需要資源Z的情況下,伺服器可以在客戶端發送請求前,主動將資源Z推送給客戶端。
這個功能幫助客戶端將Z放進緩存以備將來之需。
閱讀全文,請點擊 HTTP 2 的新特性你 get 了嗎?
都是在底層上的優化,應用層上不見得會有實質性的改變,最大的改變大概是WEB前端可以玩得更奔放了,之前很多針對性優化都變得不再重要
HTTP/2將讓javascript大放異彩!
HTTP/2 是 HTTP 協議自 1999 年 HTTP 1.1 發布後的首個更新,主要基於 SPDY 協議。
那 HTTP/2 到底有哪些具體變化呢?
二進位分幀
HTTP/2 採用二進位格式傳輸數據,而非 HTTP 1.x 的文本格式,二進位協議解析起來更高效。 HTTP / 1 的請求和響應報文,都是由起始行,首部和實體正文(可選)組成,各部分之間以文本換行符分隔。HTTP/2 將請求和響應數據分割為更小的幀,並且它們採用二進位編碼。
HTTP/2 中,同域名下所有通信都在單個連接上完成,該連接可以承載任意數量的雙向數據流。每個數據流都以消息的形式發送,而消息又由一個或多個幀組成。多個幀之間可以亂序發送,根據幀首部的流標識可以重新組裝。
多路復用
多路復用,代替原來的序列和阻塞機制。所有就是請求的都是通過一個 TCP連接並發完成。 HTTP 1.x 中,如果想並發多個請求,必須使用多個 TCP 鏈接,且瀏覽器為了控制資源,還會對單個域名有 6-8個的TCP鏈接請求限制,如下圖,紅色圈出來的請求就因域名鏈接數已超過限制,而被掛起等待了一段時間:
在HTTP/2 中,有了二進位分幀之後,HTTP /2 不再依賴 TCP 鏈接去實現多流並行了,在 HTTP/2中 :
同域名下所有通信都在單個連接上完成。
單個連接可以承載任意數量的雙向數據流。
數據流以消息的形式發送,而消息又由一個或多個幀組成,多個幀之間可以亂序發送,因為根據幀首部的流標識可以重新組裝。
這一特性,使性能有了極大提升:
同個域名只需要佔用一個 TCP 連接,消除了因多個 TCP 連接而帶來的延時和內存消耗。
單個連接上可以並行交錯的請求和響應,之間互不干擾。
在HTTP/2中,每個請求都可以帶一個31bit的優先值,0表示最高優先順序, 數值越大優先順序越低。有了這個優先值,客戶端和伺服器就可以在處理不同的流時採取不同的策略,以最優的方式發送流、消息和幀。
伺服器推送
服務端可以在發送頁面HTML時主動推送其它資源,而不用等到瀏覽器解析到相應位置,發起請求再響應。例如服務端可以主動把JS和CSS文件推送給客戶端,而不需要客戶端解析HTML時再發送這些請求。
服務端可以主動推送,客戶端也有權利選擇是否接收。如果服務端推送的資源已經被瀏覽器緩存過,瀏覽器可以通過發送RST_STREAM幀來拒收。主動推送也遵守同源策略,伺服器不會隨便推送第三方資源給客戶端。
頭部壓縮
HTTP 1.1請求的大小變得越來越大,有時甚至會大於TCP窗口的初始大小,因為它們需要等待帶著ACK的響應回來以後才能繼續被發送。HTTP/2對消息頭採用HPACK(專為http/2頭部設計的壓縮格式)進行壓縮傳輸,能夠節省消息頭佔用的網路的流量。而HTTP/1.x每次請求,都會攜帶大量冗餘頭信息,浪費了很多帶寬資源。
HTTP每一次通信都會攜帶一組頭部,用於描述這次通信的的資源、瀏覽器屬性、cookie等,
為了減少這塊的資源消耗並提升性能, HTTP/2對這些首部採取了壓縮策略:
HTTP/2在客戶端和伺服器端使用「首部表」來跟蹤和存儲之前發送的鍵-值對,對於相同的數據,不再通過每次請求和響應發送;
首部表在HTTP/2的連接存續期內始終存在,由客戶端和伺服器共同漸進地更新;
每個新的首部鍵-值對要麼被追加到當前表的末尾,要麼替換表中之前的值。
總的來說, HTTP/2 的通過支持請求與響應的多路復用來減少延遲,通過壓縮HTTP首部欄位將協議開銷降至最低,同時增加對請求優先順序和伺服器端推送的支持。
全文閱讀: 一文讀懂 HTTP/2 特性
1. 加密開銷小了,用HTTPS的網站可能更多。
2. 多路復用下REST API性能提升顯著,基於Angular.js和類似框架的Single Page Application很可能是將來趨勢。Web App將和Mobile App共享一套API。
吃貨小棧 - 一個吃貨的分享博客
明月學習筆記Blog - 折騰LNMP的記錄微博客
這是我近期新部署的兩個博客,都開啟了SSL、HSTS、HTTP/2的,一個是 WordPress 博客程序,一個是 Typecho 博客程序。
個人感覺隨著 Let』s Encrypt的證書 普及開來,HTTP/2的普及即將會有井噴式的發展。
微軟還在維護IE?
推薦閱讀:
※在網路條件下,議程設置會失效嗎?為什麼?
※子網掩碼怎麼理解?
※http, keepalive用來複用連接,這樣不就是串列的了么,瀏覽器會並行的多個請求發出,keepalive怎麼體現作用?
※NoHttp 與 OKHttp 異同?以及兩者的發展前景?
※如何理解華為公有雲中提到的全動態BGP?