Git : error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1)

Git : error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1)

请不要在未阅读完整问题的情况下将其标记为重复。

当我尝试将我的代码推送到我们的存储库时,出现以下错误:

我试着在网上搜索这个问题,我找到了很棒的资源,但没有找到确切的解决方案。有很多类似的问题,但我没有找到明确的讨论或适当的解决方案。

我提到了这个 question。 我还研究了提供相应答案的答案和参考资料。

我按照此 answer 上的建议增加了缓冲区大小,但对我不起作用。

我按照此 answer 上的建议将 HTTP 版本从 HTTP/2 降级到 HTTP/1.1,它对我有用。

我提到了一条评论,他提到为什么我们必须将 HTTP 版本从 HTTP/2 降级到 HTTP/1.1。我不明白他的评论。下面一个是他的评论。

In reply to questions about downgrading to HTTP/1.1, the error message posted by OP points to an issue with HTTP/2; it is likely that something beyond OP's control (a proxy, the GIT server, etc.) does not work well with HTTP/2. Until that's fixed, downgrading to HTTP/1.1 is a valid workaround.

所以我的问题是

  1. 为什么我们应该将 HTTP 版本从 HTTP/2 降级到 HTTP/1.1?
  2. 为什么 increasing the buffer size workaround 不适合所有人?

So my questions are

  1. Why should we downgrade HTTP version from HTTP/2 to HTTP/1.1?

我们不应该——但请参阅下文。

  1. Why increasing the buffer size workaround is not working for everyone?

这应该也是不必要的。

这里可能存在几个不同的问题,但如果您的网络连接基本正常(并非全部正常),那么 HTTP 或 HTTPS 协议问题的通常来源是某种中间件盒,例如过滤器试图阻止访问未经批准的主机,即未正确过滤。也就是说,您尝试直接连接到 github.com,但您没有连接到 github.com,而是连接到某个公司服务器。公司服务器检查 Web 请求,决定是允许还是拒绝它,并在决定允许它后, 建立自己的 连接到 github.com,然后开始中继流量。

问题是这个进行中继的中间件服务器破坏了数据

正确修复是修复或删除中间件服务器。其他任何事情都只是一种解决方法。如果 phone 中继接线员 Bob 一直告诉您 Susan 不在办公室,即使她在办公室,您也不会再向 Bob 询问 Susan。相反,您要求 Bob 将您与她的办公室伙伴 Suzie 联系起来。 Bob 现在将您连接到 Susan(显然她也叫 Suzie),您就可以完成工作了。这并不意味着 每个人 都必须叫她 Suzie,事实上,如果 Bob 叫她 Suzie,你的朋友,她的电话会通过Fred 而不是 Bob,不能 要求 Suzie:这对 Fred 不起作用。

因为计算机中继比混乱的 phone 操作员更复杂,使用 ssh:// URL 可能比 http://https:// URL 更成功。但是任何对您有效的变通方法都可以对您有效,从而解决数据损坏问题。它可能对其他任何人都不起作用,但这无论如何都不是正确的解决方法。正确的解决方法是删除或更换损坏的 filter/relay.