先确认是否网络层卡住:打开Developer Tools的Network页,点击安装扩展,若请求pending超30秒、状态为空或显示ERR_CONNECTION_TIMED_OUT,即为DNS或直连失败;若请求发往vscode.cdn.azure.cn仍超时,则可能是代理干扰或镜像未生效。

怎么看是不是网络层卡住
别急着改配置,先确认问题出在哪一层。打开 VSCode 的开发者工具(Ctrl+Shift+P → Developer: Toggle Developer Tools),切到 Network 标签页,然后在扩展面板里搜一个插件并点击安装。观察请求:
- 如果所有请求都 pending 超过 30 秒、状态码为空或显示
net::ERR_CONNECTION_TIMED_OUT,基本是 DNS 或直连失败 - 如果能看到
GET https://marketplace.visualstudio.com/...成功但后续重定向到https://vscode.blob.core.windows.net/...失败,说明 CDN 下载链路断了 - 如果请求发到了
vscode.cdn.azure.cn却仍超时,大概率是本地代理干扰或镜像源本身未生效
为什么改了 extensions.gallery.serviceUrl 还没用
VSCode 1.83+ 强制要求 serviceUrl 和 cacheUrl 必须成对出现、同域名、结尾不带 /,否则整个镜像配置被忽略。常见失效原因:
- 只配了
serviceUrl,漏掉cacheUrl - 两个 URL 域名不一致,比如
serviceUrl用vscode.cdn.azure.cn,cacheUrl写成mirrors.tuna.tsinghua.edu.cn - URL 末尾多了斜杠:
"https://vscode.cdn.azure.cn/_apis/public/gallery/"→ 应删掉最后的/ - 配置写在工作区
settings.json里,而 VSCode 只读用户级设置文件
code --install-extension 命令为啥不走镜像
命令行安装完全不读 settings.json 里的镜像配置,它依赖环境变量 VSCODE_EXTENSIONS_MSA_URL。直接运行 code --install-extension xxx 失败,是因为它还在连微软原站。
- 临时生效:终端里先执行
VSCODE_EXTENSIONS_MSA_URL=https://vscode.cdn.azure.cn code --install-extension esbenp.prettier-vscode - CI/CD 场景:必须在脚本开头显式
export VSCODE_EXTENSIONS_MSA_URL=... - 如果仍报
ETIMEDOUT,检查是否后台开着 Clash/Surge —— 它们常启用系统代理但未全局,会劫持code的 DNS 解析,导致请求发错方向
某些插件装一半就停,其实是语言服务器在后台偷下
像 ms-python.python、ms-java.java 这类插件,VSIX 包只是个“壳”,安装后会额外发起 HTTP 请求去拉语言服务器二进制(如 pyright、jdtls)。这部分流量完全绕过 gallery 协议,镜像源对其无效。
- 这类请求通常出现在 Output 面板 →
Python或Java子标签里,能看到Downloading ...日志 - 它们的目标域名一般是
github.com、github-releases.githubusercontent.com或vscode.blob.core.windows.net,和插件市场无关 - 唯一可靠解法:提前手动下载对应语言服务器二进制,放进插件缓存目录(路径因插件而异),或全程走代理


















