儘管在初探http中提到HTTP/1.1有持久的TCP連線以及 pipelining,然而可能會碰到Head of Line (HOL) Blocking。舉例來說,當base HTML file所提及的referenced objects都在相同的TCP connection,若第一個object是非常大的影片,而後面的object是其他render相關的資源,且大小較小,由於影片是第一個請求的,server在影片完整傳送前不會傳送其他小的objects。如此一來,對使用者來說,若他在網路傳輸較慢的環境,不只網頁影片延遲,連網頁其他畫面都沒有出現。
HTTP/1.1對於HOL block有一套解決辦法,就是建立多個平行的TCP connections,這樣不僅小的objects很快就會收到,整體的速度都會提升。
然而以 TCP 的 congestion control的觀點,由於每個TCP connection分配到的bandwidth是均等的,所以愈多連線分配到的bandwidth愈多。許多HTTP1.1的browser除了HOL block因素,也有取得更多bandwidth的誘因,常建立六個平行的TCP connections(當時許多browsers支援的連線上限)。為了讓TCP congestion control回到初衷,減少server 建立socket的數量, 成為HTTP/2出現的原因之一。
HTTP/2
HTTP/2是基於Google的 SPDY protocol,相較於HTTP/1.1,以下幾點是HTTP/2的特色:
Framming
當server在相同TCP connection,收到不同的objects的requests,將每個objects拆成更小的frames,每個objects皆取出部分frames傳送回去,如此一來小的objects將會較早讓client完整收到。
Response Message Prioritization
可設定1至256等級的優先性,較高優先性的訊息的frames優先發出。
Server Pushing
不需要等待browser請求base HTML file所提及的objects,server可分析base HTML file然後直接推送這些objects。