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