composer无法利用http/2多路复用加速,因国内主流镜像及packagist.org仍以http/1.1为主,且其串行拉取元数据、并发下载大体积dist包的行为与http/2优势场景不匹配;真正瓶颈在于镜像配置、缓存清理、并发控制及composer.lock使用。

Composer 本身不主动协商或强制使用 HTTP/2,它是否走多路复用,完全取决于底层 cURL 是否与远程源(如镜像站)成功协商出 HTTP/2 连接——而国内主流镜像(阿里云、腾讯云、华为云)目前仍以 HTTP/1.1 为主,packagist.org 官方也未全量启用 HTTP/2。所以“利用 HTTP/2 多路复用减少海量小文件网络开销”这个目标,在当前(2026 年中)的 Composer 生产环境中基本无法达成。
为什么 Composer 拉取小文件时根本用不上 HTTP/2 多路复用
HTTP/2 多路复用的价值在于:单连接上并发交错传输多个小响应(比如几十个 provider-2024-01.json),避免 HTTP/1.1 的队头阻塞和连接反复建连。但 Composer 的实际行为是:
- 先串行拉取元数据(
packages.json→provider-*.json),这些请求本身数量有限(通常 ≤ 20 个),且多数镜像已缓存并合并响应 - 真正“海量小文件”其实是 vendor 解压后的 PHP 类文件,它们不走 HTTP,而是本地磁盘写入 —— 这阶段完全与 HTTP/2 无关
- 真正并发下载的是 dist 包(
.zip或.tar),每个包大小通常 1–10MB,属于“大文件”,HTTP/2 多路复用对单个大文件传输无加速效果
composer install 卡在 downloading 阶段,别急着查 HTTP/2
如果你看到终端里长时间只有一行 Downloading https://... 缓慢推进,或进度数字几乎不动,问题大概率不在协议层:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
file_put_contents(/tmp/): failed to open stream→ 并发数设太高(如http-max-concurrent-downloads=20),临时目录竞争,降到8或10即可 - 始终只有一行
Downloading滚动 → 镜像源响应慢或限流(如 GitHub API 未认证触发429),不是并发没开,而是请求被排队堵死 - 卡在某个包(如
monolog/monolog)超 15 秒 → DNS 解析失败或 TLS 握手超时,尤其在 CI 环境;换 DNS(1.1.1.1)或临时禁用 TLS(COMPOSER_NO_TLS=1,仅限内网)可验证
真想减少小文件网络开销?盯紧这三件事
与其纠结 HTTP/2,不如做更直接有效的优化:
- 确保镜像源生效:
composer config -g repo.packagist输出必须含"url": "https://mirrors.aliyun.com/composer/",否则并发再高也白搭 - 清掉旧缓存:
composer clear-cache必须执行 —— 缓存里若残留 packagist.org 的元数据,Composer 会 fallback 到海外源拉取 - 用
--prefer-dist+composer.lock提交到 Git —— 这能跳过所有版本解析,直接按 lock 文件精确下载,避免动态查询 provider JSON 带来的大量小请求
HTTP/2 多路复用在 Composer 场景中是个“听起来很美但基本用不上”的特性。真正拖慢安装的,从来不是协议版本,而是镜像是否生效、缓存是否干净、并发是否被远程限流,以及你有没有提交 composer.lock。










