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.jsoncurl --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
相关产品推荐
相关产品推荐

