卡在Downloading https://时应调http-basic-timeout(Composer 2.2+)或http.timeout(旧版),控制DNS解析、TLS握手、首字节等待及整个body传输,默认60秒太短,建议设300~600秒,并需同步调整process-timeout和换阿里云镜像源。

Composer install/update 卡在 Downloading https:// 时该调哪个 timeout
看 -vvv 输出最后一行,如果停在 Downloading https://,说明是单次 HTTP 请求卡死,不是“下载慢”,而是 DNS 解析、TLS 握手、首字节等待或整个 body 传输阶段超时。Composer 2.2+ 必须调 http-basic-timeout(旧版用 http.timeout),默认 60 秒太短,国内常见首字节延迟高,建议设为 300~600。
process-timeout 和 http-basic-timeout 必须一起设
这两个 timeout 管不同阶段,只改一个大概率仍失败:
-
process-timeout控总耗时:含依赖解析、解压、运行post-install-cmd、生成 autoload、写锁文件等全部步骤,默认300 -
http-basic-timeout控每个 HTTP 请求:比如拉一个 ZIP 包,哪怕只剩 1 字节没传完,也会在这里触发超时 - 临时生效:
composer install --timeout=1200 --http-basic-timeout=300 - 永久生效:
composer config -g process-timeout 1800+composer config -g http-basic-timeout 300
第三方源响应迟钝,换镜像比加 timeout 更治本
80% 的 “超时” 实质是源不稳定,不是网速慢。阿里云镜像能绕过 DNS 污染、TLS 握手抖动和国外源响应延迟:
- 配置命令:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 配完必须清缓存:
composer clear-cache,否则仍可能读损坏的本地缓存 - 验证是否生效:
composer config -g repo.packagist应输出对应 URL,且composer install --dry-run中下载链接要变成mirrors.aliyun.com - 注意:
"type": "git"包会绕过镜像直连 GitHub,此时需额外设process-timeout并检查 Git 自身超时(如git config --global http.postBuffer 524288000)
中断后重试前不清理残留状态,timeout 问题会反复出现
Composer 没有断点续传,中断后残留的破损 ZIP、截断的 installed.json 或卡死的临时目录会持续干扰后续执行:
- 不要直接删整个
vendor/——这会导致autoload.php缺失,引发后续命令报错 - 精准清理:
rm vendor/autoload.php+rm -rf vendor/composer/ - 再运行:
composer dump-autoload→composer install - 若仍报
Failed to extract或Content-Length mismatch,说明缓存已坏,必须composer clear-cache
真正麻烦的从来不是“等多久”,而是中断后 vendor/ 里那些看似完整、实则校验失败的包文件——它们不会自己消失,也不会被 -- 参数跳过。











