Versus HTTP Different Version

Intro http1.0 versus http1.1 versus http1.2

這篇介紹http1.0 versus http1.1 versus http1.2。

<= HTTP 1.0:

在HTTP 1.0中出現的核心問題是傳輸數據時並沒有資料結束的邊界,
所以用一種暴力的方式來解決,也是每進行一次HTTP傳輸,
就必須建立一條TCP Connect,在傳輸結束後,都需要斷開一次TCP connect。
每次建立TCP connect,都需要經過三次握手,加上TCP關閉需要四次握手。
比照1.1和1.2來說非常耗費資源。

HTTP 1.1:

HTTP 1.1導入Keep-Alive機制,default為開啟。可透過Connection:close
關閉。在HTTP傳輸時,若啟用Keep-Alive機制,該連結不會立即關閉。
若有新的request進來,且host & port 相同時,則會reuse這條TCP connect。
減少TCP connect頻繁建立與close的資源消耗。

HTTP 1.1還有一個Keep-Alive request Header,可以設置timeout和max。
用來指定Idle connect保持open的時間,以及連接關閉前這條connect可以
發送request的最大值。

How To Solve HTTP粘包問題:

現在多個HTTP request,可以reuse同一條TCP connect。
它是透過Contect-Length 這個Header解決的。它表明了data
所佔用的大小。可以透過它來確定這個Data Packet的邊界,避免粘包。

HTTP 1.2:

HTTP 1.1存在的缺陷問題
1.如果client想要發起concurrent requests,則必須建立多個TCP Connect,
這對網路資源的消耗是非常嚴重的。
2.不能對request及response的Header進行壓縮,造成網路流量的浪費。

HTTP 1.2導入Multiplexing機制-
Multiplexing與Keep-Alive的區別:
1.Keep-Alive沒有解決request阻塞問題,需要等上一個request結束後,
才能復用該TCP connect進行下一個request。
2.HTTP 1.2導入Data Frame概念,使多個requests可以同時在流中進行傳輸。
3.HTTP 1.2 採用 HPACK壓縮演算法對Header進行壓縮,降低了request的流量。