目錄
http 協議版本發展
3.1 長連線
3.2 多路復用 (multiplexing)
3.3 首部壓縮(header compression)
3.4 服務端推送(server push)
3.5 更安全
http 協議在 1991 年發布第乙個版本版本號為 0.9。隨後 www 聯盟 (www consortium-w3c)於 1994 年成立,http 協議被納入到 w3c 組織中進行維護和管理。
最早在
1996
年在網頁中使用,內容簡單,所以瀏覽器的每次請求都需要與伺服器建立
乙個 tcp
連線,伺服器處理完成後立即斷開
tcp
連線(無連線),伺服器不跟蹤每個客戶端
也不記錄過去的請求(無狀態)
,請求只能由客戶端發起(單向性)。
到 1999
年廣泛在各大瀏覽器網路請求中使用,
中預設使用
connection: close
。在 http/1.1
中已經預設使用
connection: keep-alive
(長連線),避免了連線建立和釋放的開 銷,但伺服器必須按照客戶端請求的先後順序依次回送相應的結果,以保證客戶端能夠區分出每次請求的響應內容。通過 content-length
欄位來判斷當前請求的資料是否已經全部接收。不允許同時存在兩個並行的響應。
1.1
中最重要的乙個特點是支援「長連線」,即「一次連線可以多次請求」。
支援持久連線(
的預設模式使用帶流水線的持久連線),在乙個
tcp連線上可以傳送多個 http
請求和響應,減少了建立和關閉連線的消耗和延遲。乙個包含有許多影象的網頁檔案的多個請求和應答可以在乙個連線中傳輸,但每個單獨的網頁檔案的請求和應答仍然需要使用各自的連線。http 1.1
在 http/2
中,客戶端向某個網域名稱的伺服器請求頁面的過程中,只會建立一條
tcp
連線,即使這頁面可能包含上百個資源。 單一的連線應該是 http2
的主要優勢,單一的連線能減少 tcp
握手帶來的時延 。
中用一條單一的長連線,避免了建立多個
tcp
連線帶來的網路開銷,提高了吞吐量。
中所有加強效能的核心是二進位制傳輸,在
中,我們是通過文字的方式傳輸資料。在 http2.0
中引入了新的編碼機制,所有傳輸的資料都會被分割,並採用二進位制格式編碼。
多路復用,連線共享。不同的
request
可以使用同乙個連線傳輸(最後根據每個
request上的 id
號組合成正常的請求)。
中,有兩個概念非常重要:幀(
frame
)和流(
stream
)。 幀是最小的資料單位,每個幀會標識出該幀屬於哪個流,流是多個幀組成的資料流。 所謂多路復用,即在乙個 tcp
連線中存在多個流,即可以同時傳送多個請求,對端可以通過幀中的表示知道該幀屬於哪個請求。在客戶端,這些幀亂序傳送,到對端後再根據每個幀首部的流識別符號重新組裝。通過該技術,可以避免 http
舊版本的隊頭阻塞問題,極大提高傳輸效能。
由於 1.1
中 header
帶有大量的資訊,並且得重複傳輸,
2.0
使用 encoder
來減少需要傳輸的 hearder
大小。
在 http2.0
中,服務端可以在客戶端某個請求後,主動推送其他資源。 可以想象一下,某些資源客戶端是一定會請求的,這時就可以採取服務端 push
的技術,提前給客戶端推送必要的資源,就可以相對減少一點延遲時間。在瀏覽器相容的情況下也可以
使用 prefetch
使用了
tls
的拓展
alpn
做為協議公升級,除此之外,
對 tls
的安全性做了近一步加強,通過黑名單機制禁用了幾百種不再安全的加密演算法。
HTTP協議發展歷程
http超文字傳輸協議是乙個用於傳輸超文字文件的應用層協議,它是為web瀏覽器與web伺服器之間的通訊而設計的,http協議到目前為止全部的版本可以分為http 0.9 http 1.0 http 1.1 http 2.0 http 3.0,其中現在普遍應用的版本是http 1.1版本,正在推進ht...
HTTP協議發展歷程
http超文字傳輸協議是乙個用於傳輸超文字文件的應用層協議,它是為web瀏覽器與web伺服器之間的通訊而設計的,http協議到目前為止全部的版本可以分為http 0.9 http 1.0 http 1.1 http 2.0 http 3.0,其中現在普遍應用的版本是http 1.1版本,正在推進ht...
HTTP協議發展歷程
http超文字傳輸協議是乙個用於傳輸超文字文件的應用層協議,它是為web瀏覽器與web伺服器之間的通訊而設計的,http協議到目前為止全部的版本可以分為http 0.9 http 1.0 http 1.1 http 2.0 http 3.0,其中現在普遍應用的版本是http 1.1版本,正在推進ht...