"protocol error" 当 运行 ASP.NET Core on Cloud 运行

"protocol error" when running ASP.NET Core on Cloud Run

我的 ASP.NET 核心网络应用程序 运行 在云上的容器中 运行 在浏览器中访问时出现此错误。

upstream connect error or disconnect/reset before headers. reset reason: protocol error

如果可能我想使用HTTP/2。

当 Cloud 运行 配置为使用 HTTP/2 (ports[n].name: h2c) 但 Kestrel 配置为 HTTP/1 或 HTTP/1 和 2 时,可能会发生这种情况。

您只需要在 Kestrel 上强制 HTTP/2。一种方法是:

webBuilder.ConfigureKestrel((options) =>
{
    options.ConfigureEndpointDefaults(o => o.Protocols = HttpProtocols.Http2);
});

对于为版本 1 和 2 配置 Kestrel 的情况,我猜想协商失败与连接不安全有关,因为 TLS 在云 运行 下终止。

用这个来检查。

curl https://gemini-www-run-j2bjkfbw-ue.a.run.app/ --http2

如果 运行 一个网站,请检查 CanIUse 浏览器与 HTTP/2 的兼容性。

完全相同的问题, 我只将协议设置为 http2,本地检查工作 curl -i --http2-prior-knowledge http://localhost 但是 CloudRun 在前端(负载均衡器)和后端都支持 http2,return“上游连接错误”

有关信息,我的 nginx cloudrun 在此设置中工作(将端口设置为“80 http2”)