2016-04-30 50 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