【问题标题】:"protocol error" when running ASP.NET Core on Cloud Run在 Cloud Run 上运行 ASP.NET Core 时出现“协议错误”
【发布时间】:2021-12-14 14:42:27
【问题描述】:

我在 Cloud Run 上的容器中运行的 ASP.NET Core Web 应用在浏览器中访问时出现此错误。

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

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

【问题讨论】:

    标签: asp.net-core google-cloud-run kestrel-http-server


    【解决方案1】:

    当 Cloud Run 配置为使用 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 在 Cloud Run infra 处终止。

    用这个来检查。

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

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

    【讨论】:

    • 除了 Cloud Run 应用程序必须仅通过配置的端口(默认为 8080)提供 HTTP。 Cloud Run 前端/代理 (GFE) 与应用程序之间的通信仅支持 HTTP。前端通过客户端处理 HTTPS/HTTP2 并代理到 HTTP。
    • 它支持 http/2 端到端,但最后一站是明确的。我的网络服务器强制使用 http/2 并且可以正常工作。
    猜你喜欢
    • 2021-03-13
    • 1970-01-01
    • 2020-06-15
    • 2021-03-03
    • 2020-07-29
    • 2020-04-18
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多