繁体   English   中英

Nest.js API + Cloud 上的 Google Cloud Storage 运行每个 GET 请求以触发“HTTP/2 框架层中的流错误”(POST 请求工作正常)

[英]Nest.js API + Google Cloud Storage on Cloud Run every GET request to trigger "Stream error in the HTTP/2 framing layer" (POST requests work fine)

我创建了一个 Nest.js API 服务,它有一个端点可以将文件上传到 Google Bucket。 在本地以及使用本地 Docker 图像时,一切都完美无缺。 一旦我在 Cloud Run 上部署(成功),所有 GET 请求都会从 Insomnia 返回“错误:HTTP/2 框架层中的 Stream 错误”。 端点(POST 等)的 rest 工作正常。 我以为是因为我在使用流。 因此,我切换到正常的文件上传,但没有帮助。

我没有在 Nest.js 中使用 HTTP/2,也不需要它。 我只需要通过API上传一个小文件。

我尝试在 Cloud Run 上启用 HTTP/2。 没有帮助。 我删除了 stream 实现并使用正常的“上传”。 没有帮助。

你能建议一个行动方案吗?

当服务器支持 HTTP/2 但存在不完全支持后端 HTTP/2 响应的中间反向代理时,通常会出现此错误。 因此,客户端和服务器协商升级到 HTTP/2,但在 get 表达式之间破坏了一些东西。 此外,当客户端和服务器都支持时,http/2 始终是首选。 为避免此错误,您可以尝试使用以下方法禁用它:

handle_setopt(http_version = 2) (2 is the value for CURL_HTTP_VERSION_1_1)

Cloud Run 是一个 HTTP 请求/响应设计。 这意味着处理在您调用端点时开始,在端点返回时结束。也有可能是某些 API 配置和调用方法似乎与最新的 HTTP 版本不兼容。 较新版本的 CURL 将默认使用此协议,因此会失败。 这可能会产生一些相当混乱的行为,因为在一台机器上运行的脚本可能不一定在另一台机器上运行,默认情况下意味着使用什么,除非您设置另一个版本。 因此,将 1_1 设置为所需的协议版本将覆盖默认的 libcurl 本身将使用的版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM