HTTP1.0與HTTP1.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é)約了帶寬。</br>
- 另外HTTP還支持傳送內(nèi)容的一部分犹菱。這樣當(dāng)客戶端已經(jīng)有一部分的資源后拾稳,只需要跟服務(wù)器請(qǐng)求另外的部分資源即可。這是支持文件斷點(diǎn)續(xù)傳的基礎(chǔ)腊脱。
HOST域
HTTP1.0是沒有host域的访得,HTTP1.1才支持這個(gè)參數(shù)。
緩存處理
- 當(dāng)緩存對(duì)象的Age超過Expire時(shí)變?yōu)閟tale對(duì)象陕凹,cache不需要直接拋棄stale對(duì)象悍抑,而是與源服務(wù)器進(jìn)行重新激活(revalidation)。
- 為了使caching機(jī)制更加靈活杜耙,HTTP/1.1增加了Cache-Control頭域(請(qǐng)求消息和響應(yīng)消息都可使用)搜骡,它支持一個(gè)可擴(kuò)展的指令子集。
- Cache使用關(guān)鍵字索引在磁盤中緩存的對(duì)象佑女,在HTTP/1.0中使用資源的URL作為關(guān)鍵字记靡。
HTTP2.0與HTTP1.1主要區(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連接本身也是有開銷的寸痢。
數(shù)據(jù)壓縮
- HTTP1.1不支持header數(shù)據(jù)的壓縮呀洲。
- HTTP2.0使用HPACK算法對(duì)header的數(shù)據(jù)進(jìn)行壓縮。
服務(wù)器推送
當(dāng)我們對(duì)支持HTTP2.0的web server請(qǐng)求數(shù)據(jù)的時(shí)候啼止,服務(wù)器會(huì)順便把一些客戶端需要的資源一起推送到客戶端两嘴,免得客戶端再次創(chuàng)建連接發(fā)送請(qǐng)求到服務(wù)器端獲取。這種方式非常合適加載靜態(tài)資源族壳。
二進(jìn)制分幀
HTTP 2.0會(huì)將所有傳輸?shù)男畔⒎指顬楦〉南⒑蛶颈瑁?duì)它們采用二進(jìn)制格式的編碼,其中HTTP 1.1的首部信息會(huì)被封裝到Headers幀仿荆,而request body被封裝到圖中所示的DATA幀贰您。相當(dāng)于把部分?jǐn)?shù)據(jù)塞進(jìn)了二進(jìn)制分幀層里,改進(jìn)傳輸性能拢操。
請(qǐng)求優(yōu)先級(jí)
所有資源可以并行交錯(cuò)發(fā)送锦亦,那想要優(yōu)先拿到CSS和JS而不是圖片怎么辦,在每個(gè)HTTP 2.0的流里面有個(gè)優(yōu)先值令境,這個(gè)優(yōu)先值確定著客戶端跟服務(wù)器處理不同的流采取不同的優(yōu)先級(jí)策略杠园,高優(yōu)先級(jí)優(yōu)先發(fā)送,但這不是絕對(duì)的(絕對(duì)等待會(huì)導(dǎo)致首隊(duì)阻塞問題)