XHR failed不是插件问题,而是VSCode本地或远程进程发起的HTTP请求被网络层中断,常见于国内直连微软服务器失败、代理配置错位、TLS握手被重置;修复重点是打通请求链路而非重装插件。

直接说结论:XHR failed 不是插件问题,而是 VSCode 本地或远程进程发起的 HTTP 请求被网络层中断了——常见于国内直连微软服务器失败、代理配置错位、TLS 握手被重置。修复重点不在重装插件,而在打通请求链路。
为什么改了系统代理或开了 Clash,VSCode 还是报 XHR failed
VSCode 不读系统环境变量(如 HTTP_PROXY),也不继承 shell 的代理设置。它只认自己配置文件里的 http.proxy 字段,且该字段必须带协议前缀(http:// 或 https://),写成 127.0.0.1:7890 会被静默忽略。
- Windows/macOS 默认绕过
localhost和127.0.0.1,所以即使你开了代理,VSCode 发往127.0.0.1:7890的请求可能根本没进代理进程 - 代理服务本身未监听
127.0.0.1(比如只监听0.0.0.0或未开启allow-lan),也会导致连接拒绝 - 企业防火墙或出口网关会主动 RST TLS 握手后的连接,控制台里看到
net::ERR_CONNECTION_RESET就是典型表现
如何验证和修复本地插件市场访问失败
先确认是不是网络通路问题:在浏览器打开 https://marketplace.visualstudio.com,能进说明基础可用;再用终端执行 curl -I https://marketplace.visualstudio.com,如果返回 Failed to connect 或超时,就不是 VSCode 的锅。
- 打开命令面板(
Ctrl+Shift+P),运行Preferences: Open Settings (JSON),添加这两行(注意逗号): -
"http.proxy": "http://127.0.0.1:7890"(把端口换成你实际代理端口) -
"http.proxyStrictSSL": false(仅临时调试用,解决自签名证书拦截) - 禁用
extensions.autoUpdate和extensions.autoCheckUpdates,避免后台干扰诊断 - 重启 VSCode 后,按
Ctrl+Shift+I打开开发者工具 → Network 标签页 → 搜索marketplace,点安装插件,看请求是否 pending 超过 30 秒或直接失败
远程开发(Remote-SSH)场景下 XHR failed 怎么办
Remote 场景的 XHR failed 和本地完全不是一回事:出问题的是远程服务器上的 vscode-server 进程,它不继承你的 shell 环境,也不读 VSCode 客户端的代理设置。
- 必须在远程服务器上编辑
~/.vscode-server/data/Machine/settings.json(路径含Machine,不是User) - 写入有效的
http.proxy,比如{"http.proxy":"http://192.168.1.100:8080"}(确保该代理机器允许局域网连接) - 改完后必须断开并重连 Remote-SSH,否则
vscode-server不会重新加载配置 - 若服务器完全无外网,别折腾代理——直接去
https://update.code.visualstudio.com/api/releases/stable查当前COMMIT_ID,用wget下载对应vscode-server-linux-x64.tar.gz,解压到~/.vscode-server/bin/<COMMIT_ID>
离线安装插件是最稳的兜底方案
只要能拿到 .vsix 文件,就完全绕过 marketplace 请求链路。但要注意两个易错点:文件损坏、引擎版本不匹配。
- 下载后用解压工具打开
.vsix,确认里面有extension/package.json,且其中engines.vscode值 ≤ 你当前 VSCode 版本(比如你用1.85.0,插件写"^1.90.0"就装不上) - 不要双击安装——右键菜单或命令面板运行
Extensions: Install from VSIX,选中文件即可 - 若提示签名错误,说明插件未在 Microsoft 认证流程中发布,可临时加配置
"extensions.experimental.affinity": { "ms-python.python": 1 }(仅对特定 ID 生效)
真正麻烦的从来不是“怎么装”,而是“谁在发请求、往哪发、中间被谁拦了”。多数人卡在以为改了系统代理就万事大吉,结果 VSCode 根本没走那条路。盯着 Network 面板看真实请求目标,比反复重启快十倍。


















