HTTP/3 简介
前言
HTTP 2.0是由谷歌SPDY進(jìn)化而來,現(xiàn)有的實(shí)現(xiàn)基本都是走SSL(說是可以不用SSL,但基本沒這么干的),傳輸層使用TCP。
HTTP 3.0是由谷歌QUIC進(jìn)化出來的,QUIC沒有大動(dòng)HTTP 2.0,在把傳輸層調(diào)整為UDP后,為適應(yīng)UDP而做了一些微調(diào)。
HTTP 2問題
前篇已整體介紹HTTP 2,就此,此篇只說下HTTP/2的問題
在底層使用了TCP的情況下,TCP的慢啟動(dòng);擁塞窗口尺寸設(shè)置不合理導(dǎo)致的性能急劇下降的問題沒有得到解決。基因在此,無法改變
HTTP 2多路復(fù)用只是減少了連接數(shù),隊(duì)頭阻塞的問題并沒有得到完全解決。如果TCP丟包率超過2%,HTTP/2表現(xiàn)將不如HTTP1.1。因?yàn)镠TTP1 是分開使用的TCP連接,具體對(duì)比如下示意圖所示:
HTTP 3
HTTP 3是在QUIC基礎(chǔ)上發(fā)展出來的。底層使用UDP進(jìn)行數(shù)據(jù)傳輸,但上層仍然使用HTTP/2。HTTP2與UDP之前存在一個(gè)QUIC層,TLS加密過程在此層處理。QUICK存在兩個(gè)版本,早期Google打頭陣的QUIC稱之為gQUIC,IETF標(biāo)準(zhǔn)化后稱之為IQUIC。與HTTP對(duì)比,HTTP/3整體如下:
整個(gè)HTTP家族對(duì)比如下:
HTTP3特點(diǎn):
使用UDP作為傳輸層進(jìn)行通信
從協(xié)議本身保證了安全性,QUIC在建立連接的握手過程中就完成了TLS加密握手
建立連接快,正常只需要1RTT即可建立連接。如果有緩存之前的secret信息,則直接驗(yàn)證和建立連接,此過程0RTT。建立連接時(shí),也可以帶有少量業(yè)務(wù)數(shù)據(jù)。
不和具體底層連接綁定,QUIC為每個(gè)連接的兩端分別分配了一個(gè)唯一ID,上層連接只認(rèn)這對(duì)邏輯ID。網(wǎng)絡(luò)切換或者斷連時(shí),只需要繼續(xù)發(fā)送數(shù)據(jù)包即可完成連接的建立
使用QPACK進(jìn)行頭部壓縮,因?yàn)镠PACK要求傳輸過程有序,這會(huì)導(dǎo)致隊(duì)頭阻塞。而QPACK不存在這個(gè)問題
HTTP/3在header中定義了一個(gè)新header:Alt-Svc: h3=":20003":表示服務(wù)器在20003端口開了一個(gè)20003端口用于HTTP/3服務(wù)
補(bǔ)充
使用以下代碼可以判斷是否有使用HTTP/2
(function(){
// 保證這個(gè)方法只在支持loadTimes的chrome瀏覽器下執(zhí)行
if(window.chrome && typeof chrome.loadTimes === 'function') {
var loadTimes = window.chrome.loadTimes();
var spdy = loadTimes.wasFetchedViaSpdy;
var info = loadTimes.npnNegotiatedProtocol || loadTimes.connectionInfo;
// 就以 「h2」作為判斷標(biāo)識(shí)
if(spdy && /^h2/i.test(info)) {
return console.info('本站點(diǎn)使用了HTTP/2');
}
}
console.warn('本站點(diǎn)沒有使用HTTP/2');
})();
QUIC詳細(xì)介紹-->維基百科
QPACK詳細(xì)介紹-->點(diǎn)擊此處
參考資料
關(guān)于HTTP/3背后你所不知道的
HTTP/3 來啦,你還在等什么?趕緊了解一下
What is the QUIC Transport Protocol?
我的HTTP/3學(xué)習(xí)筆記
一文讀懂 HTTP/2 及 HTTP/3 特性
歡迎大家關(guān)注我的公眾號(hào):
總結(jié)
- 上一篇: python corrcoef
- 下一篇: 【python】比较两个json并返回差