Http1.x
缺陷:線程阻塞,在同一時間驯耻,同一域名的請求有一定數(shù)量限制蛙卤,超過限制數(shù)目的請求會被阻塞。Http1.0(短連接)
缺陷:瀏覽器與服務器只保持短暫的連接疆液,瀏覽器的每次請求都需要與服務器建立一個TCP連接(TCP連接的新建成本很高一铅,因為需要客戶端和服務器三次握手),服務器完成請求處理后立即斷開TCP連接堕油,服務器不跟蹤每個客戶也不記錄過去的請求潘飘;
解決方案:添加頭信息——非標準的Connection字段Connection: keep-aliveHttp1.1
改進點:
持久連接(與Http1其它版本的最大區(qū)別)
引入了持久連接肮之,即TCP連接默認不關(guān)閉,可以被多個請求復用卜录,不用聲明Connection: keep-alive(對于同一個域名戈擒,大多數(shù)瀏覽器允許同時建立6個持久連接)
管道機制
即在同一個TCP連接里面,客戶端可以同時發(fā)送多個請求艰毒。
分塊傳輸編碼
即服務端每產(chǎn)生一塊數(shù)據(jù)筐高,就發(fā)送一塊,采用”流模式”而取代”緩存模式”丑瞧。
新增請求方式
PUT:請求服務器存儲一個資源;
DELETE:請求服務器刪除標識的資源柑土;
OPTIONS:請求查詢服務器的性能,或者查詢與資源相關(guān)的選項和需求绊汹;
TRACE:請求服務器回送收到的請求信息稽屏,主要用于測試或診斷;
CONNECT:保留將來使用
缺點:
雖然允許復用TCP連接西乖,但是同一個TCP連接里面狐榔,所有的數(shù)據(jù)通信是按次序進行的。服務器只有處理完一個請求获雕,才會接著處理下一個請求薄腻。如果前面的處理特別慢,后面就會有許多請求排隊等著届案。這將導致“隊頭堵塞”
避免方式:一是減少請求數(shù)庵楷,二是同時多開持久連接
- Http/2.0
特點:
采用二進制格式而非文本格式;
完全多路復用萝玷,而非有序并阻塞的嫁乘、只需一個連接即可實現(xiàn)并行昆婿;(解決了線頭阻塞的問題球碉,與Http1最重要的區(qū)別)
使用報頭壓縮,降低開銷
服務器推送
4.1 二進制協(xié)議
HTTP/1.1 版的頭信息肯定是文本(ASCII編碼)仓蛆,數(shù)據(jù)體可以是文本睁冬,也可以是二進制。HTTP/2 則是一個徹底的二進制協(xié)議看疙,頭信息和數(shù)據(jù)體都是二進制豆拨,并且統(tǒng)稱為”幀”:頭信息幀和數(shù)據(jù)幀。
二進制協(xié)議解析起來更高效能庆、“線上”更緊湊施禾,更重要的是錯誤更少。
4.2 完全多路復用
HTTP/2 復用TCP連接搁胆,在一個連接里弥搞,客戶端和瀏覽器都可以同時發(fā)送多個請求或回應邮绿,而且不用按照順序一一對應,這樣就避免了”隊頭堵塞”攀例。
4.3 報頭壓縮
HTTP 協(xié)議是沒有狀態(tài)船逮,導致每次請求都必須附上所有信息。所以粤铭,請求的很多頭字段都是重復的挖胃,比如Cookie,一樣的內(nèi)容每次請求都必須附帶梆惯,這會浪費很多帶寬酱鸭,也影響速度。
對于相同的頭部垛吗,不必再通過請求發(fā)送凛辣,只需發(fā)送一次;
HTTP/2 對這一點做了優(yōu)化职烧,引入了頭信息壓縮機制扁誓;
一方面,頭信息使用gzip或compress壓縮后再發(fā)送蚀之;
另一方面蝗敢,客戶端和服務器同時維護一張頭信息表,所有字段都會存入這個表足删,產(chǎn)生一個索引號寿谴,之后就不發(fā)送同樣字段了,只需發(fā)送索引號失受。
4.4 服務器推送
HTTP協(xié)議通常承載于TCP協(xié)議之上讶泰,在HTTP和TCP之間添加一個安全協(xié)議層(SSL或TSL),這個時候拂到,就成了我們常說的HTTPS.