对于HTTP2协议,其底层与HTTP1.1完全不同,但是为了与HTTP1.1协议兼容,HTTP2提供了一种从HTTP1.1升级到HTTP2.H2C的方法。
在Netty中,HTTP2的数据对应于各种HTTP2Frame对象,HTTP1的数据对应于Httprequest和Httpheaders。如果要将HTTP2消息从客户端发送到支持HTTP2的服务器,那么您需要发送这些服务,然后将这些发送给这些服务器,然后您需要发送这些服务。http2frame对象,您可以像http1.1一样发送httprequest对象吗?
今天的文章将透露给所有人。
当然,Netty考虑了客户的需求,因此提供了两个相应的类:InboundHTTP2ToHttpAdapter和HttptPTPOHTTP2ConnectionHandler。
它们是两种方式,其中InboundHTTP2ToHttPadapter转换为HTTP/2帧转换为HTTP/1.X对象,而HTTPTPTP2Connectionler与http/1.x对象相反,我们只需要http/2帧。处理程序中的HTTP1对象。
他们的基础层实际上称为HTTPConversionutil类中的转换方法,并转换了HTTP2对象和HTTP1对象。
像服务器一样,客户端的连接也需要区分它是TLS还是清晰的文本。TLS很简单。您只需要处理HTTP2数据即可。清晰的文字很复杂。您需要考虑HTTP升级的情况。
首先查看TLS的连接处理。
首先是创建SSLContext。客户端创建和服务器侧创建没有什么不同。在这里,您应该注意SSLContextBuilder Call Call Forclient()方法:
然后将SSLCTX的Newhandler方法传输到管道中:
最后,加入Application -protocolnogotiationHandler,就TLS扩展协议进行协商:
如果是HTTP2协议,则需要将三个处理程序添加到PIPLINE,即ConnectionHandler,settingsHandler和Response Handler。
ConnectionHandler用于处理客户端和服务器之间的连接。这是上一节中提到的httptpohttp2connectionHandlerBuilder,该httptptohtohttp2connectionler在上一节中提到,该http1.1对象用于将http1.1对象转换为http2对象。
但是连接实际上是两条路。HTTPPHTTP2 ConnectionHandler将HTTP1.1转换为HTTP2。它实际上是一个出站处理器。我们还需要一个入站处理器来转换接收到的HTTP1.1对象。通过添加Framelistener来遗传。
FrameListener被传递到授权的EcompressorFramelistener中,该词也是在上一节中引入的。
SettingsHandler用于处理HTTP2SETTING入站消息,响应Handler用于处理FullHttPrespesponse入站消息。
这两个是自定义处理程序课程。
从上面的代码可以看出,我们仅在TLS的协议Negotia中处理了HTTP2协议。如果是HTTP1协议,将直接报告错误。如果它是HTTP1协议,则可以通过清晰的文本升级(即H2C协议)实现。
让我们看看需要添加H2C的处理程序:
首先,httpclientcodec用作源代码处理程序,然后将httpclientupgradehandler添加为升级处理程序。最后,添加自定义的CustupGradereQuestHandler和Event Recorder usereereventlogger。
CustomUpgradereQuestHandler负责创建升级QuanterQuest并在Channeenelactive时发送到频道。
由于UPGradeCodec已经包含处理HTTP2连接的连接Handler,因此您还需要手动添加settingshandler和wendershandler。
处理程序配置后,我们可以直接在HTTP1中发送HTTP2消息。
首先发送GET请求:
然后有一个邮政请求:
它与普通HTTP1请求没有太大不同。
通过使用InboundHTTP2TOHTTPADAPTER和HTTPTPTOHTP2ConnectionDler发送HTTP2非常方便,以轻松使用HTTP1方法。这很方便。
本文的示例可以参考:Learn-netty4
最受欢迎的解释,最深的干货,最简单的教程,您不知道的许多技巧正在等待您发现!
欢迎注意我的公共帐户:“程序的事情”,了解技术并更好地了解您!