鍍金池/ 教程/ Linux/ 擴(kuò)展
后http2時代
升級HTTP
擴(kuò)展
擴(kuò)展閱讀
致謝
http2 的世界
curl中的http2
Chromium里的http2
背景
Firefox里的http2
HTTP 的現(xiàn)狀
http2 協(xié)議
http2 的基本概念
那些年,克服延遲之道

擴(kuò)展

協(xié)議強(qiáng)制規(guī)定接收方必須讀取并忽略掉所有未知幀類型的幀。雙方必須在逐跳原則(hop-by-hop basis)基礎(chǔ)上協(xié)商使用新的幀,這些幀的狀態(tài)無法被改變,并且也不受流控制。

是否應(yīng)該允許添加擴(kuò)展的這個話題在制定http2協(xié)議的時候被反復(fù)討論了很久。在draft-12之后,最終確定允許添加擴(kuò)展。

但擴(kuò)展不再是協(xié)議本身的一部分,它被記錄在核心協(xié)議規(guī)范之外。到目前為止,有兩種曾被http2工作組包含在協(xié)議里的幀,很可能率先被納入?yún)f(xié)議的擴(kuò)展部分。這兩個曾被當(dāng)作“原生”的幀非常流行,所以接下來我會詳細(xì)討論它們。

7.1. 備選服務(wù)(Alternative Services)

隨著http2逐漸被接受,我們有理由猜測,相對于HTTP 1.x,TCP連接會更長且被保持的更久。對客戶端來講,最好是到每個主機(jī)/站點(diǎn)的每一條連接都可以做盡可能多的事情,這也需要每個連接保持開啟更長的時間。

但這會影響到HTTP負(fù)載均衡器的正常工作,比如在一個網(wǎng)站想建議客戶端連接到另外一個主機(jī)的時候。通常,網(wǎng)站此舉的目的在照顧性能,但也可能是正常維護(hù)或類似原因。

服務(wù)器將會通過發(fā)送Alt-Svc頭(或者h(yuǎn)ttp2的ALTSVC幀)來告知客戶端另一個備選服務(wù)。即另外一條指向不同的服務(wù)源、主機(jī)或端口,但卻能獲取同樣內(nèi)容的路由。

客戶端可以嘗試異步的連接到該服務(wù),或者可用的話就選擇備選方案。

7.1.1. 機(jī)會型TLS(Opportunistic TLS)

Alt-Svc頭部允許服務(wù)器通過http://告訴客戶端:同樣的內(nèi)容也可以通過TLS連接來獲取。

這是個還在討論中的功能。這樣的連接會導(dǎo)致未認(rèn)證的TLS,并且在任何地方也不會被廣播為“安全”,同時不會在客戶端界面上出現(xiàn)任何鎖標(biāo)識,所以沒法讓用戶知道這其實(shí)不是常規(guī)的HTTP連接。這就是很多人強(qiáng)烈反對機(jī)會型TLS的原因。

7.2. 阻塞(Blocked)

當(dāng)有數(shù)據(jù)需要被發(fā)送,但流控制卻禁止發(fā)送任何數(shù)據(jù)時,此類型的幀將會被發(fā)送一次。這種幀設(shè)計的目的在于,如果你接收到了此幀,那么連接中必然有錯誤發(fā)生或者是得到了低于期望的傳輸速度。

在此幀被放到協(xié)議擴(kuò)展部分之前,draft-12中的一段話:

阻塞幀被包含在此版本的草案中作為實(shí)驗(yàn),如果沒有得到良好的反饋,就把它刪除。