首页 > 其他分享 >Http2服务调用(5G核心网)

Http2服务调用(5G核心网)

时间:2022-10-24 10:34:52浏览次数:79  
标签:TLS http1.1 调用 http 核心网 Http2 5G 服务端 http2.0

Http2服务调用(5G核心网)

一. HTTP2

使用http协议的人越来越多。http1.1的弊端慢慢都被显现出来。

1) 浏览器方式一些网站频繁发送请求,造成一家独大其他网站无法使用。或者所有网站都频发发送请求造成用户体验差等等问题。限制每个url同时并发数量。

2) 提高请求的响应速度。只有一个连接,只有一次tcp三次握手或者tls的7次握手。一个http1.1请求所用的时间,http2.0可以处理三到四个请求。

3) 提高服务端与客服端的性能(尤其是大型互联网公司流量很大,如果使用http2.0,可以减少一半的http服务器)。

http客服端不知道http服务端是否支持http2.0。反过来 http服务端也不知道http客服端是否支持http2.0。为什么出现这种现象,让所有的http服务端与http客服端直接从http1.1过度到http2.0是不可能的事情。甚至在大点的公司内部直接从http1.1直接过度到http2.0也是一件不现实的事情,那么出现一件麻烦的事情有http1客服端,也有http2客服端。有http2服务端,也有http1服务端。这种两个维度,四种情况的共存现象。

有人会问,只支持http1.1不好吗? 已经支持http2,.0的client肯定不会放弃http2.0优秀的性能与特性,能使用http2.0,就要使用。

那么http2.0的设计者为了解决这种麻烦的东西。推出了解决方案:协商。

https1.1与https2.0的协商是基于ALPN机制。ALPNS是基于TLS实现。在建立TLS链接的时候,客服端会 在TLS协议里面加入自己支持的协议,服务端在客服端支持的协议里面选中一个自己最合适的。然后把选中的协议通知给客服端。如果客户端没有发送支持的http协议,服务端会默认使用http1.1。

http没有TLS协议,无法基于TLS传递协议。协议制定者使用了Upgrade机制。客户端发送一个空请求,请求里面包含该Upgrade,Connection,HTTP2-Settings请求头。服务端从Upgrade取出支持的协议然后响应请求,在响应的请求头里面包含Upgrade,Connection。这样协商就成功。

下面是http1.1与http2.0的协商流程,请求头示例:

GET / HTTP/1.1 Host: Example Domain Connection: Upgrade, HTTP2-Settings Upgrade: h2c HTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload>

如果服务端不支持 HTTP/2,它会忽略 Upgrade 字段,直接返回 HTTP/1.1 响应,例如:

HTTP/1.1 200 OK Content-Length: 243 Content-Type: text/html

如果服务端支持 HTTP/2,那就可以回应 101 状态码及对应头部:

HTTP/1.1 100 Switching Protocols Connection: Upgrade Upgrade: h2c

总结:

1)https 1.1 与https.2.0的协商 与 http1.1与http2.0的协商是两套设计方案。https 1.1 与https.2.0 TLS自动实现。http1.1与http2.0的协商需要自己实现。

2)现在的趋势,客服端与服务端都需要同时支持http1.1,http2.0,https1.1,https2.0,技术实现比较复杂。

二. 问题描述

2.1问题描述

项目的问题出在于通过JAVA端去调用华为提供的H2服务时,一直返回PROTOCOL_ERROR错误;但是同样的写法调用,自己写的H2服务是可以的,调用baidu,taobao,small都可以;也就是说明程序是可以用的,但为什么华为就是返回错误呢? 以下是华为侧回复的内容:

意思是说客户端调用时使用的协议不对,服务端解析不了,要求我们在报文头加上协调参数。客户端按要求修改,但问题依旧;发现服务端并不支持协商的方式去调用,抓如下:

2.2. 其它工具验证:

1) 浏览器调用不成功。

2) POSTMAN调用不成功。

3) CURL调用不成功。

2.3. Jdk版本支持H2说明:

原文链接:Java对HTTP2的支持

1) Java 8

初始即支持TLS 1.2,并且客户端默认即使用TLS 1.2。

但是为了支持HTTP2,还要借助于Jetty的ALPN模块alpn-boot。

下载alpn-boot的jar,并且在启动JVM时加参数java -Xbootclasspath/p:<path_to_alpn_boot_jar> ...

2) Java 9

初始即支持TLS 1.2,并且客户端默认即使用TLS 1.2。

通过JEP 244, TLS ALPN Extension支持ALPN,完整支持了HTTP2。

3) Java 10

同Java 9。

4) Java 11

同Java 9,并进而支持TLS 1.3。

三. 问题排查

到此时发现,根据第二部分所讲,JAVA端调用HTTP2的以下两种方式都走不通:

1) 调https方式,因为5G核心网为了提高效率,而且都是内部使用,规范中并不提供加密调用的方式,走不通。

2) 走http1.1协商的方式,需要服务端根据协调参数,自动选择;但现在也不支持。

3.1. 换jar包

在此过程上反复的尝试了多种方法:

1)升级到jdk11,通过原生的httpClient去调用,问题依旧:

HttpClient client = HttpClient.newBuilder()       
.version(HttpClient.Version.HTTP_2)       
.priority(0)       
.sslContext(SSLContext.getInstance("TLSv1.2"))       
.build();

2) 通过okHttpClient3.2去调用,问题依旧:

3) 通过netty去调用,问题依旧。

4) 协调了客户侧的网络专家帮忙分析,通过curl --http2调用,问题依旧。

3.2. 分析C++成功案例

后台C++开发客户端是可以正常调用的,通过了解,C++指定了强制使用H2协议去调用,将包抓出来比对,发现在客户端发送请求时,确实存在差异:

问题定位:

java端是否有也类型的参数,可以指定强制使用H2方式去调用呢;

3.3. 尝试curl命令

首先通过curl进行反复的尝试:

Curl 只设置了--http2 参数时调用不成功 。

在 https://curl.haxx.se/docs/http2.html 找到了参数--http2-prior-knowledge说明:

Curl 通过 --http2-prior-knowledge 强制使用H2协议去调用,验证成功。

3.4. 查找类prior-knowledge参数,解决问题

在 https://www.jianshu.com/p/9530d58250c7 中找到解决办法:

动手尝试验证:

第一步,升级okHttpClient包到4.1.0:

第二步,编写测试程序:

第三步,抓包验证,成功:

 

四. 总结:java调用H2的方法

4.1. 加密调用

https1.1与https2.0的协商是基于ALPN机制。ALPNS是基于TLS实现。在建立TLS链接的时候,客服端会 在TLS协议里面加入自己支持的协议,服务端在客服端支持的协议里面选中一个自己最合适的。然后把选中的协议通知给客服端。如果客户端没有发送支持的http协议,服务端会默认使用http1.1

4.2. 协商调用

开源地址:https://http2.github.io/http2-spec/#discover-http:

4.3. 强制指定H2方式调用

    参考:https://zhuanlan.zhihu.com/p/390206328  

标签:TLS,http1.1,调用,http,核心网,Http2,5G,服务端,http2.0
From: https://www.cnblogs.com/lizm166/p/16820670.html

相关文章

  • 联发科发布全新6nm 5G移动芯片天玑900 (XY6877ZA智能模块)
      MediaTek发布天玑系列5GSoC最新产品天玑900。天玑900基于6nm先进工艺制造,搭载硬件级4KHDR视频录制引擎,支持1.08亿像素摄像头、5G双全网通和Wi-Fi6连接、旗舰级......
  • CF1045G 题解
    前言题目传送门!更好的阅读体验?和模版稍有不同的cdq分治。思路cdq是离线算法,所以我们可以先给\(x_i\)离散化一下。同时,记录下\((x_i-r_i)\)与\((x_i+r_i)......
  • 基于5G网关的桥梁监测方案
    桥梁是国家大小路网的重要组成部分,针对预防安全隐患于未然,需要在桥梁的施工期及运营期进行全周期监测。这里就可以融合物联网感知和通信技术,借助5G无线智能网关对接多功能......
  • Wallys/IPQ4018/IPQ4028 2x2 2.4Ghz 2x2 5Ghz Industrial-grade //wifi5 Support 11AB
    Wallys/IPQ4018/IPQ40282x22.4Ghz2x25GhzIndustrial-grade//wifi5Support11ABGN/AC IPQ40x8/IPQ40x9istheindustry'sfirstWave2802.11ACSoCWiFisolut......
  • 5G 增强型“智能垃圾箱”测试
    英国桑德兰市正在试行多项5G增强型智慧城市技术,包括“智能垃圾箱”。试验期间,在全市范围内安装了许多智能垃圾箱。智能垃圾箱是该市议会与BAICommunications(BAI)合......
  • 5G时代,你的企业还在采用“传统网络”?
    5G时代,你的企业还在采用“传统网络”?​在互联网5G冲浪时代,人们越来越离不开网络的需求,不管是基于疫情环境下的移动办公和在线教育,还是直播视频、网购电商等,都对网络的畅通要......
  • HTTP1.0/HTTP1.1/HTTP2.0区别
    转载链接:https://vue3js.cn/interview/http/1.0_1.1_2.0.html#%E4%B8%80%E3%80%81http1-0一、HTTP1.0HTTP协议的第二个版本,第一个在通讯中指定版本号的HTTP协议版......
  • 道路照明智能监控用5G智慧灯杆网关
    道路照明智能监控用5G智慧灯杆网关道路照明智能监控用5G智慧灯杆网关TG473,工业级设计适用恶劣室外环境,支持poe供电,多应用接口满足智慧灯杆外围设备接入联网,丰富协......
  • 4G 网络跟 5G 的区别
    1、5G网络的速度据说保守可以达到4G的10-20倍,下载一些大型文件,例如电影,大型电脑游戏,将会是分分钟的事。2、5G网络将会率先使用云RAN和虚拟RAN这样的新架构,以促进一个更......
  • 物联网领域中,5G和边缘计算哪个性价比更高?
    随着数字化信息化的发展,对了更快更好的对设备进行管理,避免计划外的故障和事故,企业对于网速、延迟的要求越来越严格,很多相关的技术与产品逐渐被应用起来。其中5G技术和边缘计......