composer不支持http/3,因其底层curl扩展截至2026年中仍无quic协议栈;镜像站启用http/3对composer无效,实测仍走tcp+tls;提速应聚焦dns优化、tls握手、并行下载(parallel-downloads=16)及镜像预编译缓存。

composer 默认走 HTTP/1.1 或 HTTP/2,不支持 HTTP/3 —— 即使你的 Web 服务器(如 Nginx 或 Caddy)已启用 h3,composer 客户端本身不会主动协商或降级使用 QUIC。这是根本限制,不是配置能绕过的。
为什么 composer install 不走 HTTP/3?
composer 底层依赖 PHP 的 cURL 扩展(或 ext-http),而截至 2026 年中,cURL 主流发行版(包括 8.10.x、8.11.x)仍不支持 QUIC 传输层。即使你用 curl --http3 命令能成功请求镜像站,composer 进程内部调用的 curl_easy_perform() 仍会 fallback 到 TCP+TLS。这不是 bug,是协议栈缺失。
镜像站启用 HTTP/3 ≠ 客户端自动受益
国内主流 Composer 镜像(如阿里云、腾讯云、华为云)确已在边缘节点部署了 HTTP/3 支持,并通过 Alt-Svc 头通告 h3=":443"。但该机制只对浏览器和少数原生支持 HTTP/3 的客户端(如 Chrome、curl --http3、wget2)生效。Composer 不在其中。
- 验证方式:运行
composer config -g repo.packagist.org,输出仍是https://packagist.org或镜像 URL,无协议标识 - 抓包确认:用
tshark -f "port 443 and udp"监听,执行composer update时几乎看不到 QUIC 流量 - 对比测试:用
curl -v --http3 https://mirrors.aliyun.com/composer/packages.json可见ALPN, offering h3和Using HTTP/3,但同一 URL 被composer请求时走的是 TCP
真正能提速的替代路径
与其强求 composer 走 HTTP/3,不如聚焦它实际卡点:DNS 解析、TLS 握手、TCP 慢启动、包体解压。以下措施实测有效:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 强制使用本地 DNS 缓存(如
dnsmasq或systemd-resolved),避免每次请求都触发上游 DNS 查询 - 配置
composer config -g github-protocols https,禁用 SSH 协议回退,防止卡在 Git SSH 探测 - 启用并行下载:
composer config -g parallel-downloads 16(需 Composer 2.5+) - 镜像源必须带
packages.json的完整预编译缓存 —— 阿里云镜像的/packages.json是静态文件,而某些自建镜像若动态生成该文件,会引入 PHP-FPM 延迟,这比网络协议影响更大 - 跳过哈希校验(仅限可信内网):
composer install --no-plugins --no-scripts --optimize-autoloader,减少 PHP 层开销
未来可期但尚未落地的方案
如果你控制客户端环境(如 CI/CD 构建机),可尝试以下实验性路径:
- 用
nghttp3+ngtcp2编译支持 HTTP/3 的定制版cURL,再重新编译 PHP 启用该 cURL;但 PHP 的 stream wrapper 未适配 ALPN 切换,仍需 patchext/curl - 改用
php-pm或Swoole实现 HTTP/3 client,再封装为 Composer 插件 —— 目前无成熟开源实现,维护成本极高 - 等待 Composer 3.x(规划中)集成
amphp/http-client或nyholm/psr7生态,这些库已有 HTTP/3 adapter 原型,但稳定版至少还需 12–18 个月
现阶段所谓“HTTP/3 Composer 镜像加速”,99% 是营销话术。真实瓶颈在 PHP 进程调度、JSON 解析、vendor 符号链接生成等环节,而非传输协议。别在 UDP 端口上浪费调试时间,先 strace -e trace=connect,sendto,recvfrom composer install 看清哪一环真在等网络。










