1.HTTP1.0九十年代就發(fā)布了,當(dāng)時(shí)面向的環(huán)境是主要是一些請(qǐng)求簡單html靜態(tài)文件,內(nèi)容是一些簡單的文字、圖片,請(qǐng)求網(wǎng)頁時(shí)每次是發(fā)完一個(gè)請(qǐng)求并接收返回成功后開始下一個(gè)HTTP請(qǐng)求
2.九十年代末,預(yù)見著互聯(lián)網(wǎng)大規(guī)模增長,網(wǎng)頁交互越來越復(fù)雜,請(qǐng)求里面有大量圖片、js、css、視頻等,并且網(wǎng)絡(luò)速度提高,優(yōu)化后的HTTP1.1協(xié)議出現(xiàn)了,HTTP1.1除了一些細(xì)節(jié)的優(yōu)化,
最明顯的是默認(rèn)開啟久化連接(長連接)以及管道pipelining技術(shù):
長連接是針對(duì)同一對(duì)客戶端/服務(wù)器請(qǐng)求來說的,后續(xù)的請(qǐng)求和響應(yīng)可以通過這個(gè)連接發(fā)送,tcp連接不會(huì)立即關(guān)閉,減少tcp連接,服務(wù)器端有超時(shí)、連接數(shù)配置
管道流水線技術(shù)(cpu在執(zhí)行命令的時(shí)候也會(huì)使用流水線技術(shù),增大命令處理的吞吐量)無須等待前一個(gè)請(qǐng)求返回就發(fā)送了下一個(gè)請(qǐng)求,可以一次發(fā)送多個(gè)請(qǐng)求,而在接收response返回時(shí)也必須按照
順序接收,前一次請(qǐng)求阻塞了沒返回就算后一次處理完了也會(huì)等待前一次阻塞請(qǐng)求處理完成返回,導(dǎo)致后面的請(qǐng)求都需要等待,這就是隊(duì)頭阻塞
3.谷歌的spdy請(qǐng)求優(yōu)先級(jí),重要的請(qǐng)求設(shè)置高優(yōu)先級(jí)減少請(qǐng)求的阻塞,其它特性有壓縮請(qǐng)求頭,多路復(fù)用等
4.http2借鑒了spdy協(xié)議的實(shí)現(xiàn),pipelining也可以同時(shí)發(fā)送多個(gè)請(qǐng)求,但不強(qiáng)調(diào)返回順序,處理完多少返回多少,比如客戶端發(fā)送a、b兩個(gè)請(qǐng)求,b請(qǐng)求已經(jīng)處理完畢,a請(qǐng)求只處理部分,會(huì)先返回a中已經(jīng)
處理好的部分,接著回應(yīng)b請(qǐng)求,a處理完成后再返回剩余部分,http2把請(qǐng)求/響應(yīng)分成多個(gè)非連續(xù)塊,并標(biāo)記了每塊屬于哪個(gè)請(qǐng)求/響應(yīng)