假设http2连接已经存在,是否可以从Jetty启动http2会话或流



可以进行服务器推送。但是,如果客户端是底层jetty客户端,是否可以从服务器启动新的会话或流?假设客户端是基于jetty的低级客户端,并且连接已经建立。

在建立了初始连接并交换了前缀之后,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支持通常需要JDK8,而目前这在Android中不可用。如果已经有HTTP/2安卓客户端能够处理服务器启动的流,请评论这个答案,因为我真的很感兴趣。

不过,服务器启动流的想法很有趣,我提交了这个问题来跟踪它。如果这对您来说真的很重要,您可以联系Webtide(Jetty背后的公司)来赞助实施。

最新更新