You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下Chrome、MinGW curl及NodeJS多站点间歇性连接重置错误,PowerShell与Linux虚拟机无此问题

Windows下Chrome、MinGW curl及NodeJS多站点间歇性连接重置错误,PowerShell与Linux虚拟机无此问题

看起来你遇到了一个挺让人头疼的间歇性网络问题——同一台机器上Chrome、MinGW curl、NodeJS还有WSL里的相关工具访问GitHub raw资源时,居然有三分之一概率失败,但PowerShell和原生Linux虚拟机却完全正常,太闹心了!结合你给出的测试结果和日志,我来帮你捋捋可能的原因和解决方向:

先明确核心差异点

从你的测试来看,失败的工具都依赖Windows主机的网络/SSL栈:

  • MinGW(Git for Windows)的curl用的是Windows自带的Schannel SSL库
  • Windows下的NodeJS默认也依赖Schannel
  • WSL的网络其实是通过Windows主机转发的,所以WSL里的curl/NodeJS也受Windows网络配置影响

而成功的场景要么是PowerShell(虽然也用Schannel,但可能默认配置更兼容),要么是原生Linux虚拟机(用的是独立的物理网卡网络栈,不依赖Windows)。这说明问题大概率出在Windows主机的SSL/TLS配置或者网络栈的细微异常上。

具体排查与解决步骤

1. 强制工具使用指定的TLS版本/加密套件

GitHub的CDN服务器对不同TLS版本和加密套件的兼容性可能有差异,试试给失败的工具指定更兼容的参数:

  • MinGW curl:
    强制用TLS 1.2试试:
    curl --tlsv1.2 https://raw.githubusercontent.com/glowbuzzer/gbr/master/package.json
    
    或者指定兼容性好的加密套件:
    curl --ciphers ECDHE-ECDSA-AES128-GCM-SHA256 https://raw.githubusercontent.com/glowbuzzer/gbr/master/package.json
    
  • NodeJS脚本:
    修改脚本,手动指定TLS选项(比如禁用可能有问题的TLS 1.3,或者指定加密套件):
    import https from "https";
    import { constants } from "node:crypto";
    
    const options = {
      hostname: 'raw.githubusercontent.com',
      port: 443,
      path: '/glowbuzzer/gbr/master/package.json',
      method: 'GET',
      // 禁用TLS 1.3试试
      secureOptions: constants.SSL_OP_NO_TLSv1_3,
      // 指定兼容的加密套件
      ciphers: 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256'
    };
    
    console.log("making request")
    const req = https.request(options, res => {
      console.log("statusCode", res.statusCode);
      res.on("data", d => process.stdout.write(d));
      res.on("end", () => console.log("No more data in response."));
    });
    
    req.on('error', e => console.error(e));
    req.end()
    

2. 检查Windows的Schannel SSL配置

Windows的Schannel可能禁用了某些GitHub需要的TLS版本或加密套件:

  • 打开注册表编辑器(regedit),导航到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
  • 确认TLS 1.2\Client和TLS 1.3\Client下的DisabledByDefault值为0(启用状态),如果没有这些项,可以手动新建
  • 注意修改注册表前记得备份!

3. 排查Windows的网络过滤干扰

第三方安全软件(杀毒、防火墙)、VPN或者系统自带的网络规则可能在干扰连接:

  • 暂时关闭杀毒软件、VPN,再测试curl和NodeJS脚本
  • 检查Windows Defender防火墙的出站规则,确保没有阻止curl或node.exe的网络请求

4. 尝试指定GitHub raw的IP地址

GitHub的raw资源是通过CDN分发的,可能某些CDN节点和你的网络连接不稳定:

  • 先通过nslookup raw.githubusercontent.com获取几个可用的IP
  • 用curl指定IP测试:
    curl --resolve raw.githubusercontent.com:443:185.199.108.133 https://raw.githubusercontent.com/glowbuzzer/gbr/master/package.json
    
  • 如果某个IP能稳定连接,可以修改Windows的hosts文件(C:\Windows\System32\drivers\etc\hosts),把raw.githubusercontent.com指向这个稳定IP

5. 重置Windows网络栈

有时候Windows网络栈的缓存或配置异常会导致这类问题,试试重置:

  • 以管理员身份打开命令提示符,依次运行:
    netsh winsock reset
    netsh int ip reset
    ipconfig /release
    ipconfig /renew
    ipconfig /flushdns
    
  • 重启电脑后再测试

总结

你的问题核心是Windows主机网络/SSL栈的配置或异常导致依赖它的工具间歇性连接失败,而PowerShell的Schannel配置更兼容、原生Linux虚拟机用独立网络栈所以不受影响。按上面的步骤一步步排查,应该能找到解决办法。

备注:内容来源于stack exchange,提问作者jugglingcats

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 09:18:02