卡在downloading https://时应调http-basic-timeout参数,它专控单次zip包下载的连接与读取超时,默认仅60秒,需设为240~600秒,并确保php的default_socket_timeout不低于该值,同时必须正确配置镜像源并清除缓存。

下载压缩包(.zip 或 .tar)卡在 Downloading https://... 并报超时,核心问题不是网络不通,而是 Composer 对单次 HTTP 请求的等待时间太短——它默认只等 60 秒(http-basic-timeout),而国内镜像首字节延迟、大包传输慢时极易触发。
卡在 Downloading https:// 该调 http-basic-timeout
这是最常被忽略的参数:它专控「拉 ZIP 包」这一动作的单次连接+读取时限,和 process-timeout 完全无关。Composer 2.2+ 才支持,旧版本无效。
- 临时生效(推荐调试用):
composer install --http-basic-timeout=300(设为 5 分钟) - 项目级永久生效:
composer config http-basic-timeout 300,写入当前composer.json的config段 - 全局生效:
composer config -g http-basic-timeout 300,写入~/.composer/config.json - 值设为
0表示不限时,但不建议——可能无限挂起,失去可控性
http.timeout 和 http-basic-timeout 到底谁管什么
http.timeout 控的是整个 HTTP 生命周期(DNS 解析 + TLS 握手 + 首字节等待 + body 传输),默认 300 秒;而 http-basic-timeout 是更细粒度的「单次 GET 请求读取超时」,专用于下载 dist 包。两者叠加生效:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 若
http-basic-timeout先到(比如 60 秒),直接失败,http.timeout还没机会触发 - 若包很大、网络抖动,
http-basic-timeout必须设高(建议 240~600),否则哪怕http.timeout是 1200 也没用 - PHP 的
default_socket_timeout(查法:php -i | grep default_socket_timeout)必须 ≥ 你设的http-basic-timeout,否则 PHP 层会提前掐断
换源后仍超时?先清缓存再验证是否真走镜像
镜像配置写错或缓存未清,会导致 Composer 表面用了阿里云地址,实际仍悄悄回源 packagist.org 做校验,然后卡在 DNS 或 TLS 握手——这时调任何 timeout 都白搭。
- 确认镜像配置正确:
composer config -g repo.packagist输出必须是{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}(注意末尾斜杠和type字段) - 立刻清缓存:
composer clear-cache,否则旧元数据还在本地,不会拉新镜像 - 验证是否真走镜像:
composer show laravel/framework -vvv 2>&1 | grep "Downloading",日志里必须出现mirrors.aliyun.com - 如果项目已有
vendor/和composer.lock,建议删掉再重装,避免残留干扰
真正卡住时,http-basic-timeout 是第一道要调的阀;但光调它不够——镜像配置必须对、缓存必须清、PHP 底层 socket 超时必须兜底。三者缺一,timeout 就只是多等几秒而已。










