与华为联调过程中,HTTP/2.0 协议踩坑

Springboot实现HTTP2.0
联调过程中的问题涉及敏感信息,所以不写过程了,直接上结论

一、首先客户端:

1、需要jdk9以上,但是因为服务器有ARM的,而JDK9官网未提供ARM版本,所以升级为JDK11

2、最开始使用JDK11原生net.http包下的httpClient,但是此客户端只支持HTTP2协商升级协议,也就是apln协议,此协议需要发起带upgrade的1.1请求,对端如果支持升级2.0,则会回101接受升级。一般用于不确定对端是否支持HTTP/2.0的时候,测试中抓包发现,当我们服务给对端发请求时,第一个请求为upgrade,协商升级,而后直接报错,所以猜测要改为明文。

之后通过翻查CURL命令,、找到一个without HTTP/1.1 upgrade的HTTP2.0,通过此命令模拟发送了一个明文2.0协议请求给对端,抓包观察后,一切正常。故确认应更改我们的请求方式为明文请求。
在这里插入图片描述
在这里插入图片描述

3、如上所述,因为和华为、东信北邮等公司能力网元对接,对端明确要求使用HTTP2.0明文协议,也就是HTTP 2.0 clear。但是httpclient不支持发起此类请求(起码我自己没找到),所以更换客户端为OKHttp,版本为4.1.0。 代码如下
在这里插入图片描述

二、服务端:

以上操作之后,发出的请求已经为HTTP2.0明文协议的请求了,即不发升级请求协商升级,直接发送2.0请求。

但是后续暴露另一个问题,对端调用我系统时,也是H2C 明文调用,我的服务接口并不支持。

所以需要在Springboot中做到HTTP2.0明文接口。

经过查询资料,最后采用的为tomcat实现。 因为Springboot默认自带的tomcat,起的端口不支持2.0,所以需要我们新起一个tomcat,并修改其配置,使其支持HTTP2.0 (Springboot支持多connector)

实现如下:
在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值