轉(zhuǎn): HTTP1.0 HTTP 1.1 HTTP 2.0主要區(qū)別
長連接
HTTP 1.0需要使用keep-alive參數(shù)來告知服務(wù)器端要建立一個(gè)長連接拱雏,而HTTP1.1默認(rèn)支持長連接绍豁。
HTTP是基于TCP/IP協(xié)議的,創(chuàng)建一個(gè)TCP連接是需要經(jīng)過三次握手的,有一定的開銷咳榜,如果每次通訊都要重新建立連接的話,對性能有影響肛鹏。因此最好能維持一個(gè)長連接骗村,可以用個(gè)長連接來發(fā)多個(gè)請求。
節(jié)約帶寬
HTTP 1.1支持只發(fā)送header信息(不帶任何body信息)旦部,如果服務(wù)器認(rèn)為客戶端有權(quán)限請求服務(wù)器祈搜,則返回100,否則返回401士八∪菅啵客戶端如果接受到100,才開始把請求body發(fā)送到服務(wù)器婚度。
這樣當(dāng)服務(wù)器返回401的時(shí)候蘸秘,客戶端就可以不用發(fā)送請求body了,節(jié)約了帶寬蝗茁。
另外HTTP還支持傳送內(nèi)容的一部分醋虏。這樣當(dāng)客戶端已經(jīng)有一部分的資源后,只需要跟服務(wù)器請求另外的部分資源即可哮翘。這是支持文件斷點(diǎn)續(xù)傳的基礎(chǔ)哎甲。
HOST域
現(xiàn)在可以web server例如tomat畅厢,設(shè)置虛擬站點(diǎn)是非常常見的弄抬,也即是說扳剿,web server上的多個(gè)虛擬站點(diǎn)可以共享同一個(gè)ip和端口。
HTTP1.0是沒有host域的艰匙,HTTP1.1才支持這個(gè)參數(shù)限煞。
HTTP1.1 HTTP 2.0主要區(qū)別
多路復(fù)用
HTTP2.0使用了多路復(fù)用的技術(shù),做到同一個(gè)連接并發(fā)處理多個(gè)請求旬薯,而且并發(fā)請求的數(shù)量比HTTP1.1大了好幾個(gè)數(shù)量級晰骑。
當(dāng)然HTTP1.1也可以多建立幾個(gè)TCP連接,來支持處理更多并發(fā)的請求绊序,但是創(chuàng)建TCP連接本身也是有開銷的硕舆。
TCP連接有一個(gè)預(yù)熱和保護(hù)的過程,先檢查數(shù)據(jù)是否傳送成功骤公,一旦成功過抚官,則慢慢加大傳輸速度。因此對應(yīng)瞬時(shí)并發(fā)的連接阶捆,服務(wù)器的響應(yīng)就會(huì)變慢凌节。所以最好能使用一個(gè)建立好的連接钦听,并且這個(gè)連接可以支持瞬時(shí)并發(fā)的請求。
關(guān)于多路復(fù)用倍奢,可以參看學(xué)習(xí)NIO 朴上。
數(shù)據(jù)壓縮
HTTP1.1不支持header數(shù)據(jù)的壓縮,HTTP2.0使用HPACK算法對header的數(shù)據(jù)進(jìn)行壓縮卒煞,這樣數(shù)據(jù)體積小了痪宰,在網(wǎng)絡(luò)上傳輸就會(huì)更快。
服務(wù)器推送
意思是說畔裕,當(dāng)我們對支持HTTP2.0的web server請求數(shù)據(jù)的時(shí)候衣撬,服務(wù)器會(huì)順便把一些客戶端需要的資源一起推送到客戶端,免得客戶端再次創(chuàng)建連接發(fā)送請求到服務(wù)器端獲取扮饶。這種方式非常合適加載靜態(tài)資源具练。
服務(wù)器端推送的這些資源其實(shí)存在客戶端的某處地方,客戶端直接從本地加載這些資源就可以了甜无,不用走網(wǎng)絡(luò)扛点,速度自然是快很多的。