curl error: RPC failed; curl 18 HTTP/2 stream 5 was reset8.00 KiB/s

声明:作者声明此文章为原创,未经作者同意,请勿转载,若转载,务必注明本站出处,本平台保留追究侵权法律责任的权利。
全栈老韩
全栈工程师,擅长iOS App开发、前端(vue、react、nuxt、小程序&Taro)开发、Flutter、React Native、后端(midwayjs、golang、express、koa)开发、docker容器、seo优化等。

不管在什么类型的项目中,当使用git相关的pull或者clone时,有时候会遇到以下错误:

error: RPC failed; curl 18 HTTP/2 stream 5 was reset8.00 KiB/s
Early EOF
Expect 5032 Kib

或者

error time out

忘记给错误截图了,但是问题基本是那个类似是上面的报错。

从上面的报错来看,其实是在curl的时候,网络disconnect或者其他类似的io出错。

这个问题的出现其实就是由于网络超时导致的package没有传输完成,或者是由于缓冲区小了导致的io error。

面对这样的问题,有2种思路是可以思考的。

  1. 增加git clone的时间,防止由于time out而导致的终止链接,即增大buffer。
  2. 升级curl到8.2.1以上。【推荐先尝试这个方式

1. 升级curl

我们先来说升级curl的方式,其实在curl的github上(https://github.com/curl/curl/issues/11353)就已经有相关的issue提出来,而且作者也说了8.2.1之前的版本确实会复现这样的问题,所以很简单,直接查看本地的curl版本,如果低于8.2.1版本,那么直接去升级就好了。

查看curl的版本:

curl --version

升级本地的curl版本:

brew install curl

注意:
在Mac上通过brew安装的curl,有可能没有自动配置环境变量,甚至安装之后查看curl的版本,还是之前的版本。所以需要进一步配置一下环境变量。

通过brew info查看刚才安装的curl:

brew info curl

然后,按照截图的蓝色框框中的内容,配置一下环境变量:

echo 'export PATH="/usr/local/opt/curl/bin:$PATH"' >> ~/.zshrc

然后再检查curl的版本:

确认版本正确之后,再去执行git相关的操作,验证是否可行。
我自己的问题是在更新curl后得到解决。

2. 增加git clone的时间

很容易理解,增加clone时间其实就是希望哪怕网速再慢,也可以慢慢clone下来,而不会导致time out而链接中断。
那么常用的设置命令是:

git config --global http.postBuffer 157286400

这里是把缓冲区设置为150M大小,git默认的是1M。

其实很多程序员对此存在争议,认为这个设置是没有必要的,但仍然有程序员通过这个设置解决了自己的问题。

对于这个设置,由于我自己通过这个命令没有解决我遇到的问题,所以暂时不敢苟同。

3. 另外还有一种解法,就是使用http/1.1而不是http/2来进行传输

这个方式我没尝试过,但是有一定的道理,http/2的协议比http/1.1确实多了很多限制,那么更改成http/1.1,或许可以解决transfer中遇到的问题,仅作参考吧。

这种方式的解法是:
先设置:

git config --global http.version HTTP/1.1

当执行完git相关的操作后,再设置:

git config --global http.version HTTP/2
评论列表
全栈老韩·
这里额外还有一个方法哈,就是如果你使用电脑的Wi-Fi,如果速度太慢的话,那么可以尝试链接手机热点尝试。 对于使用双卡号的手机,尽量选择没有绑定宽带的手机号,貌似绑定宽带的手机号在使用流量时会限制网速。