HTTP1.0 HTTP 1.1主要區(qū)別
長(zhǎng)連接
HTTP 1.0需要使用keep-alive參數(shù)來告知服務(wù)器端要建立一個(gè)長(zhǎng)連接,而HTTP1.1默認(rèn)支持長(zhǎng)連接。
HTTP是基于TCP/IP協(xié)議的,創(chuàng)建一個(gè)TCP連接是需要經(jīng)過三次握手的,有一定的開銷,如果每次通訊都要重新建立連接的話,對(duì)性能有影響。因此最好能維持一個(gè)長(zhǎng)連接,可以用個(gè)長(zhǎng)連接來發(fā)多個(gè)請(qǐng)求。
節(jié)約帶寬
HTTP 1.1支持只發(fā)送header信息(不帶任何body信息),如果服務(wù)器認(rèn)為客戶端有權(quán)限請(qǐng)求服務(wù)器,則返回100,否則返回401。客戶端如果接受到100,才開始把請(qǐng)求body發(fā)送到服務(wù)器。
這樣當(dāng)服務(wù)器返回401的時(shí)候,客戶端就可以不用發(fā)送請(qǐng)求body了,節(jié)約了帶寬。
另外HTTP還支持傳送內(nèi)容的一部分。這樣當(dāng)客戶端已經(jīng)有一部分的資源后,只需要跟服務(wù)器請(qǐng)求另外的部分資源即可。這是支持文件斷點(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è)請(qǐng)求,而且并發(fā)請(qǐng)求的數(shù)量比HTTP1.1大了好幾個(gè)數(shù)量級(jí)。
當(dāng)然HTTP1.1也可以多建立幾個(gè)TCP連接,來支持處理更多并發(fā)的請(qǐng)求,但是創(chuàng)建TCP連接本身也是有開銷的。
TCP連接有一個(gè)預(yù)熱和保護(hù)的過程,先檢查數(shù)據(jù)是否傳送成功,一旦成功過,則慢慢加大傳輸速度。因此對(duì)應(yīng)瞬時(shí)并發(fā)的連接,服務(wù)器的響應(yīng)就會(huì)變慢。所以最好能使用一個(gè)建立好的連接,并且這個(gè)連接可以支持瞬時(shí)并發(fā)的請(qǐng)求。
關(guān)于多路復(fù)用,可以參看學(xué)習(xí)NIO 。
數(shù)據(jù)壓縮
HTTP1.1不支持header數(shù)據(jù)的壓縮,HTTP2.0使用HPACK算法對(duì)header的數(shù)據(jù)進(jìn)行壓縮,這樣數(shù)據(jù)體積小了,在網(wǎng)絡(luò)上傳輸就會(huì)更快。
服務(wù)器推送
意思是說,當(dāng)我們對(duì)支持HTTP2.0的web server請(qǐng)求數(shù)據(jù)的時(shí)候,服務(wù)器會(huì)順便把一些客戶端需要的資源一起推送到客戶端,免得客戶端再次創(chuàng)建連接發(fā)送請(qǐng)求到服務(wù)器端獲取。這種方式非常合適加載靜態(tài)資源。
服務(wù)器端推送的這些資源其實(shí)存在客戶端的某處地方,客戶端直接從本地加載這些資源就可以了,不用走網(wǎng)絡(luò),速度自然是快很多的。
聯(lián)系客服