如何在服务器 2016 上的 Asp.net core 2.2 kestrel(自托管)中启用 http/2

Fre*_*ger 1 http2 asp.net-core-mvc asp.net-core

我刚刚将我的项目从 asp.net core 2.1 更新到2.2(主要原因是 Brotli- 和 http/2 支持)。
我能够重建、部署和启动应用程序(自托管控制台应用程序)。
该应用程序在 Windows 2016 服务器上运行并启用了 https(通过公共证书)。
服务器支持 TLS 1.2(使用工具通过互联网检查)。
不幸的是,http/2 不起作用,因此 Brotli 压缩似乎起作用了。
我的客户端也支持 http/2 - 如果我使用 GC 查看我的网站,我可以看到,我引用的一些文件是通过 http/2 服务器,但不是我的内容。

根据网上查到的资料:

  • 我的配置应该满足 http/2 的先决条件
  • 默认情况下,Asp.net core 2.2 应自动使用 http/2 (无需更改代码或设置),如果客户端不支持 http/2,则自动回退到 http/1.1

我在这里想念什么......?

Fre*_*ger 7

刚刚自己找到了解决方案...
我使用appsettings.json在服务器上配置kestrel

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
,
    "Kestrel": {
        "EndPoints": {
            "Http": {
                "Url": "http://localhost:5000"
            },
            "HttpsInlineCertFile": {
                "Url": "https://nnn.nnn.n.n:nnnnn",
                "Protocols": "Http1AndHttp2",  
                "Certificate": {
                    "Path": "./certificate.pfx",
                    "Password": "Password",
                    "AllowInvalid": "true"
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我不得不添加条目: “协议”:“Http1AndHttp2”,

现在,它似乎可以工作(GC 现在向协议显示“h2”)。
但结果并不如预期(现在似乎有点慢..)。
但是,这是我最初发布的解决方案。
希望这可以帮助某人...