设置 HTTP/1.1 或 HTTP/2.0 协议

问题描述

我有一个 WebApp(Ionic App)和 DotNet Core WebAPI 服务。我将它托管在 2 个不同的 IIS 服务器上,即 Server1 和 Server2。有时,我的应用程序在 Server2 上运行不正常。当我调试代码并查看日志时,我发现 WebAPI 日志中有奇怪的行为。

Server1:应用运行良好。如果我查看日志,我可以看到所有 API 请求的 HTTP/2.0 协议。没有对 HTTP/1.1 的单一请求。

Request starting HTTP/2.0

Server2:应用运行不正常。我可以看到 API 请求的两个协议。有时能看到HTTP/1.1协议,有时能看到HTTP/2.0协议。

Request starting HTTP/1.1
Request starting HTTP/2.0

Server2 的主要问题:这两个协议用于单个请求。假设当我从我的应用程序点击 API(GetData) 时,我可以在日志中看到两个 GetData 请求。唯一的区别是两个请求都有不同的 HTTP 协议,即 HTTP/1.1 和 HTTP/2.0。

当我检查 Chrome 开发者的网络调用工具时,我只能看到应用发出的一个调用。在网络选项卡中,协议为 HTTP/1.1。对于同一个请求,我可以在 API 日志中看到两个不同的请求,使用不同的 HTTP 协议。此外,我可以看到 API 日志(API 的逻辑)中的 HTTP/2.0 请求一切正常,但我的应用程序一直在等待 HTTP/1.1 请求。因此,我的应用没有从 HTTP/1.1 上的 API 得到响应,并在应用上显示错误

GetData API 实现:我正在从 3rd 方服务获取一些数据。 3rd 方服务只能为单个会话 ID 返回一次数据。当我收到两个请求(意思是 GetData 代码执行两次)时,我收到了来自 HTTP/2.0 协议请求的 3rd 方服务的数据,而不是 HTTP/1.1。因此,使用 HTTP/1.1 的请求超时并在应用程序上引发错误

问题:我可以控制 HTTP 协议吗?如果是,我想设置每个请求都在 HTTP/2.0 或 HTTP/1.1 上提供服务。我可以完全控制 IIS 服务器,因此我可以在需要时修改任何配置。 TLS1.2的配置可以做些什么吗?

更新: 我想我找到了问题的根本原因。

Server1:所有请求都使用 HTTP/2.0 协议。 (检查 IIS 日志)

Server2:所有请求都使用 HTTP/1.1 协议。 (检查IIS日志) 但是,仍然不确定哪个组件正在为 Server2 上的 HTTTP/2.0 协议生成新请求。

好吧,我运行 curl 命令并发现了一个新问题“HTTP/2 流 0 没有完全关闭:HTTP_1_1_required (err 13)”。我认为由于这个问题,所有请求都使用 HTTP/1.1 协议。如果我修复它,所有服务将使用 HTTP/2.0 协议。

问题:

enter image description here

现在,我该如何解决这个服务器问题?我不想将其处理到代码中。 (我的意思是在代码中指定HTTP协议)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...