gcp cloud 在标头之前运行上游连接错误或断开/重置。重置原因:协议错误

Vib*_*aur 7 google-cloud-platform webpack http2 google-cloud-run http-status-code-502

我有一个与 webpack 捆绑在一起的节点应用程序,我正在尝试将其部署到云运行。为了能够在云运行中加载超过 32 MB(设定限制)的文件,我将标头('Transfer-encoding' : 'chunked')添加到 webpack 配置文件中。(该文件是一个 min.js 文件,是网站的缩小版本,在点击 url 时加载)。

在本地,一切运行正常,但是当此更改部署在云运行上时,在部署后单击应用程序 url 时会出现以下错误:

(502错误)

“上游连接错误或在标头之前断开/重置。重置原因:协议错误”

我在部署中禁用了 http2 端到端选项。

这是添加 header 的 webpack 文件

webpack.config.js

开发服务器:{

    contentBase: path.resolve(__dirname, 'build'),

    host: '0.0.0.0',
    port: process.env.PORT || 8601,
    sockPort: 'location',
    disableHostCheck: true,
    devServer: {
       headers: {
         'Transfer-encoding': 'chunked',
       },
    },
    
}
Run Code Online (Sandbox Code Playgroud)

nav*_*ule 11

根本原因

我之前检查过选项“Use HTTP/2 end-to-end如果您的容器是 gRPC 流服务器或者能够直接处理 HTTP/2 明文请求,则使用”。

我这样做是出于一些故障排除的目的。在 Cloud Run 上选择Use HTTP/2 end-to-end并部署服务后,通常需要一些时间才能使这些设置生效。

因此,当您打开电源时,您可能不会预先看到故障Use HTTP/2 end-to-end。诸如gcp cloud 运行上游连接错误或在标头之前断开/重置等故障。重置原因:可能出现协议错误。

在此输入图像描述

使固定

要修复此问题,请从 GCP Console 中取消选择,导航到 Cloud Run -> 您的服务 -> 编辑 -> 连接选项卡 -> Use HTTP/2 end-to-end

在此输入图像描述

然后选择该选项Serve this revision immediately并单击“部署”

在此输入图像描述

现在,您的应用程序应该按预期正常工作,如我的案例所示。

在此输入图像描述


小智 1

TLDR: Check your response header for special characters.
Run Code Online (Sandbox Code Playgroud)

你好,

我们在调用 Cloud Run 实例时收到了完全相同的 502 响应,其正文为:

upstream connect error or disconnect/reset before headers. reset reason: protocol error
Run Code Online (Sandbox Code Playgroud)

我们的 Cloud Run 服务提供文档生成,其中 json 输入的属性用作文档名称的一部分。我们的响应标头包含如下标头条目:

Content-Disposition: attachment; filename=<the-attribute-value>.pdf
Run Code Online (Sandbox Code Playgroud)

我们的服务还在具有用西里尔字母书写的属性的国家/地区运行。这给我们带来了问题。

我们找到了文件名的替代方案,它独立于用户的输入。

希望有帮助!