2016-04-30 66 views

回答

0

在建立初始連接並交換了前綴後,HTTP/2是一個對稱協議。

HTTP 語義要求客戶端發起請求,但在較低級別 - 在HTTP/2協議組幀級別 - 這不是必需的,並且服務器可能向客戶端發起流。

雖然HTTP/2協議幀前言後是對稱的,它仍然依賴於HTTP協議語義,即需要一個DATA幀之前發送HEADERS幀(即使是空的)。然而,如果你想在HTTP/2成幀的基礎上構建你自己的協議,這可能不會有太大的阻礙,你只需要添加幾個字節來通過網絡發送。另外,有一些建議使用HTTP/2成幀來傳輸HTTP/2 DATA幀內的WebSocket(純雙向協議)幀,實質上是無限響應的無限請求。但我離題了。

至於HTTP/2的Jetty特定實現,是否有可能從服務器向Android客戶端發起流?

答案是雙重的。

第一個是目前的實現(Jetty 9.3.8)有一些假設,即HTTP/2成幀傳輸的協議是HTTP。這樣,服務器啓動的流當前被客戶端丟棄。 但是,要覆蓋此行爲並允許客戶端正確處理服務器啓動的流,這與服務器處理客戶端啓動的流的方式相當簡單。

第二個是Jetty的HTTP/2支持通常需要JDK 8,而目前這在Android中不可用。 如果已經存在能夠處理服務器啓動的流的HTTP/2 Android客戶端,請評論這個答案哪一個,因爲我真的很感興趣。

雖然服務器啓動的流的思想很有趣,我提交了this issue來跟蹤它。 如果這對你真的很重要,你可以聯繫Webtide(Jetty公司)來贊助實施。

+0

感謝您的詳細解答@sbordet,我正在研究客戶端和服務器代碼。很高興知道實施起來很簡單。 – Nambi