"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”)
我的 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”)