Http1.x
缺陷:線程阻塞叫乌,在同一時間卿啡,同一域名的請求有一定數(shù)量限制嘱支,超過限制數(shù)目的請求會被阻塞。Http1.0(短連接)
缺陷:瀏覽器與服務(wù)器只保持短暫的連接厕九,瀏覽器的每次請求都需要與服務(wù)器建立一個TCP連接(TCP連接的新建成本很高蓖捶,因為需要客戶端和服務(wù)器三次握手),服務(wù)器完成請求處理后立即斷開TCP連接扁远,服務(wù)器不跟蹤每個客戶也不記錄過去的請求腺阳;
解決方案:添加頭信息——非標(biāo)準(zhǔn)的Connection字段Connection: keep-aliveHttp1.1
改進(jìn)點:
持久連接(與Http1其它版本的最大區(qū)別)
引入了持久連接,即TCP連接默認(rèn)不關(guān)閉穿香,可以被多個請求復(fù)用,不用聲明Connection: keep-alive(對于同一個域名绎速,大多數(shù)瀏覽器允許同時建立6個持久連接)
管道機(jī)制
即在同一個TCP連接里面皮获,客戶端可以同時發(fā)送多個請求。
分塊傳輸編碼
即服務(wù)端每產(chǎn)生一塊數(shù)據(jù)纹冤,就發(fā)送一塊洒宝,采用”流模式”而取代”緩存模式”购公。
新增請求方式
PUT:請求服務(wù)器存儲一個資源;
DELETE:請求服務(wù)器刪除標(biāo)識的資源;
OPTIONS:請求查詢服務(wù)器的性能雁歌,或者查詢與資源相關(guān)的選項和需求宏浩;
TRACE:請求服務(wù)器回送收到的請求信息,主要用于測試或診斷靠瞎;
CONNECT:保留將來使用
缺點:
雖然允許復(fù)用TCP連接比庄,但是同一個TCP連接里面,所有的數(shù)據(jù)通信是按次序進(jìn)行的乏盐。服務(wù)器只有處理完一個請求佳窑,才會接著處理下一個請求。如果前面的處理特別慢父能,后面就會有許多請求排隊等著神凑。這將導(dǎo)致“隊頭堵塞”
避免方式:一是減少請求數(shù),二是同時多開持久連接
- Http/2.0
特點:
采用二進(jìn)制格式而非文本格式何吝;
完全多路復(fù)用溉委,而非有序并阻塞的、只需一個連接即可實現(xiàn)并行爱榕;(解決了線頭阻塞的問題瓣喊,與Http1最重要的區(qū)別)
使用報頭壓縮,降低開銷
服務(wù)器推送
4.1 二進(jìn)制協(xié)議
HTTP/1.1 版的頭信息肯定是文本(ASCII編碼)呆细,數(shù)據(jù)體可以是文本型宝,也可以是二進(jìn)制。HTTP/2 則是一個徹底的二進(jìn)制協(xié)議絮爷,頭信息和數(shù)據(jù)體都是二進(jìn)制趴酣,并且統(tǒng)稱為”幀”:頭信息幀和數(shù)據(jù)幀。
二進(jìn)制協(xié)議解析起來更高效坑夯、“線上”更緊湊岖寞,更重要的是錯誤更少。
4.2 完全多路復(fù)用
HTTP/2 復(fù)用TCP連接柜蜈,在一個連接里仗谆,客戶端和瀏覽器都可以同時發(fā)送多個請求或回應(yīng),而且不用按照順序一一對應(yīng)淑履,這樣就避免了”隊頭堵塞”隶垮。
4.3 報頭壓縮
HTTP 協(xié)議是沒有狀態(tài),導(dǎo)致每次請求都必須附上所有信息秘噪。所以狸吞,請求的很多頭字段都是重復(fù)的,比如Cookie,一樣的內(nèi)容每次請求都必須附帶蹋偏,這會浪費很多帶寬便斥,也影響速度。
對于相同的頭部威始,不必再通過請求發(fā)送枢纠,只需發(fā)送一次;
HTTP/2 對這一點做了優(yōu)化黎棠,引入了頭信息壓縮機(jī)制晋渺;
一方面,頭信息使用gzip或compress壓縮后再發(fā)送葫掉;
另一方面些举,客戶端和服務(wù)器同時維護(hù)一張頭信息表,所有字段都會存入這個表俭厚,產(chǎn)生一個索引號户魏,之后就不發(fā)送同樣字段了,只需發(fā)送索引號挪挤。
4.4 服務(wù)器推送
HTTP協(xié)議通常承載于TCP協(xié)議之上叼丑,在HTTP和TCP之間添加一個安全協(xié)議層(SSL或TSL),這個時候扛门,就成了我們常說的HTTPS.