“error while fetching extensions. xhr failed”本质是vscode本地客户端请求微软插件市场时网络中断,主因是代理配置错误、企业防火墙拦截或tls握手被重置,非插件本身问题。

插件安装时提示“Error while fetching extensions. XHR failed”
这错误本质是 VSCode 本地客户端发起 HTTP 请求去拉取插件列表或下载包时失败了,不是插件本身有问题,而是网络通道断了。常见于国内直连微软扩展市场(marketplace.visualstudio.com)不稳定、被限速或中间代理干扰的场景。
排查优先看两点:settings.json 里有没有错配的 http.proxy 或 https.proxy;VSCode 是否被系统代理策略劫持(比如某些企业安全软件会静默注入代理)。打开设置搜索 proxy,如果值是 http://127.0.0.1:8080 这类本地地址但你没开代理工具,就直接删掉整行。
- 检查当前网络能否手动访问
https://marketplace.visualstudio.com—— 在浏览器里打开,能进说明基础通路没问题 - 禁用所有代理设置后重启 VSCode,再试一次插件搜索
- 如果公司内网有白名单机制,确认
marketplace.visualstudio.com和vscode.blob.core.windows.net已放行
“XHR failed”伴随“connection was reset”日志
控制台(Ctrl+Shift+I → Console 标签页)里看到类似 net::ERR_CONNECTION_RESET 的报错,说明 TCP 连接在 TLS 握手后被强制中断。这不是 VSCode 的 bug,而是网络设备(防火墙、WAF、出口网关)主动 RST 了请求。
典型触发条件:请求头里带了非常规字段(如旧版 VSCode 自动加的 User-Agent: vscode/1.85.0),或服务器端对 TLS 版本/加密套件做了严格限制。VSCode 1.89+ 已默认启用 TLS 1.3,但部分老旧网关只认 TLS 1.2。
- 临时验证:在终端执行
curl -v https://marketplace.visualstudio.com,观察是否同样被 reset - 若 curl 也失败,问题出在网络层,需联系 IT 部门调整策略
- 若 curl 成功但 VSCode 失败,尝试在
settings.json中添加:"http.proxyStrictSSL": false(仅测试用,不建议长期开启)
手动安装插件绕过 XHR 请求
当自动流程反复失败,最稳的方式是跳过 marketplace 请求,直接装离线包。VSCode 插件本质是 .vsix 文件,可从官网下载后本地安装。
操作路径很明确:打开 https://marketplace.visualstudio.com/items?itemName=ms-python.python(把 ms-python.python 换成你要的插件 ID),滚动到底部点 “Download Extension”,得到 python-2024.12.1.vsix 这类文件。然后在 VSCode 里按 Ctrl+Shift+P → 输入 Extensions: Install from VSIX... → 选中该文件。
- 插件 ID 查法:在 marketplace 页面 URL 里,
itemName=后面那段就是,例如esbenp.prettier-vscode - 不要用第三方打包站下载 .vsix,校验签名易失效,VSCode 可能拒绝加载
- 装完后检查插件面板里状态栏是否显示 “Installed” 而非 “Install”
为什么改 settings.json 里的 http.proxy 有时反而更糟
很多人以为填上代理就能通,结果越配越错。关键点在于:VSCode 的代理逻辑分两层——HTTP 请求走 http.proxy,但部分底层通信(如调试器、语言服务)会绕过它直连。如果代理本身不稳定,就会出现“部分功能正常、插件市场始终失败”的割裂现象。
更隐蔽的问题是协议混用:http.proxy 值写成 https://127.0.0.1:8080(带 s)会导致 VSCode 尝试用 HTTPS 连代理,而多数本地代理(如 Clash、Fiddler)只监听 HTTP 端口,直接 400 报错。
- 正确格式只有两种:
http://127.0.0.1:7890或socks5://127.0.0.1:1080 - 如果代理支持 HTTPS,必须显式配置
http.proxyStrictSSL: false才可能握手成功 - Windows 用户注意:系统级代理开关(设置 → 网络和 Internet → 代理)会全局覆盖 VSCode 设置,务必关掉
真正卡住人的往往不是技术点本身,而是错误日志里没暴露的网络中间件行为。与其反复调 proxy 参数,不如先用 curl 定位到底是哪一层断了——这是最省时间的做法。











