http2協(xié)議強(qiáng)制規(guī)定了接收方必須讀取并忽略掉所有未知幀(即未知幀類(lèi)型的幀)。雙方可以在逐跳原則(hop-by-hop basis)基礎(chǔ)上協(xié)商使用新的幀,但這些幀的狀態(tài)無(wú)法被改變,也不受流控制。
是否應(yīng)該允許添加擴(kuò)展的這個(gè)話(huà)題在制定http2協(xié)議的時(shí)候被反復(fù)討論了很久,但在draft-12之后,最終塵埃落定確定了允許添加擴(kuò)展。
但擴(kuò)展不再是協(xié)議本身的一部分,它被記錄在核心協(xié)議規(guī)范之外。現(xiàn)在已經(jīng)有兩種類(lèi)型的幀被工作組記錄在案,它們很可能率先被納入?yún)f(xié)議的擴(kuò)展部分,而這兩個(gè)曾被當(dāng)作“原生”的幀非常流行,所以接下來(lái)我會(huì)詳細(xì)討論它們。
隨著http2逐漸被接受,我們有理由相信,相對(duì)于HTTP 1.x,TCP連接會(huì)更長(zhǎng)并被保持的更久。對(duì)客戶(hù)端來(lái)講,最好是到每個(gè)主機(jī)/站點(diǎn)的每一條連接都可以做盡可能多的事情,而這也需要每個(gè)連接可以保持更長(zhǎng)的時(shí)間。
但這會(huì)影響到HTTP負(fù)載均衡器的正常工作,比如在一個(gè)網(wǎng)站會(huì)出于性能的考慮,當(dāng)然也可能是正常的維護(hù)或者一些類(lèi)似的原因,想建議客戶(hù)端連接到另外一個(gè)主機(jī)的時(shí)候。
服務(wù)器將會(huì)通過(guò)發(fā)送Alt-Svc頭(或者h(yuǎn)ttp2的ALTSVC幀)來(lái)告知客戶(hù)端另一個(gè)備選服務(wù)。即另外一條指向不同的服務(wù)源、主機(jī)或端口,但卻能獲取同樣內(nèi)容的路由。
客戶(hù)端應(yīng)該嘗試異步的去連接到該服務(wù),如果連接成功的話(huà),即可以使用該備選服務(wù)。
Alt-Svc頭部意味著允許服務(wù)器基于http://
提供內(nèi)容,與此同時(shí),這個(gè)頭部也意味著告知客戶(hù)端:同樣的內(nèi)容也可以通過(guò)TLS連接來(lái)獲取。
這是個(gè)還在討論中的功能。因?yàn)檫@樣的連接會(huì)產(chǎn)生一個(gè)未認(rèn)證的、在任何地方也不會(huì)被標(biāo)示為“安全”的TLS連接,也不會(huì)在客戶(hù)端界面上出現(xiàn)任何鎖標(biāo)識(shí),所以沒(méi)法讓用戶(hù)知道這其實(shí)不是常規(guī)的HTTP連接。這就是很多人強(qiáng)烈反對(duì)機(jī)會(huì)型TLS的原因。
這個(gè)類(lèi)型的幀意味著:當(dāng)服務(wù)端存在需要發(fā)送的內(nèi)容,但流控制卻禁止發(fā)送任何數(shù)據(jù)時(shí),那么此類(lèi)型的幀將會(huì)被發(fā)送且僅發(fā)送一次。這種幀設(shè)計(jì)的目的在于,如果你接收到了此幀,那么連接中必然有錯(cuò)誤發(fā)生或者是得到了低于期望的傳輸速度。
在此幀被放到協(xié)議擴(kuò)展部分之前,draft-12中的一段話(huà):
”阻塞幀被包含在草案版本中作為實(shí)驗(yàn)性的特性,如果它無(wú)法獲得良好的反饋,那么該特性最后會(huì)被移除?!?/p>
更多建議: