composer 默认使用 http/1.1,不支持 http/2,因其未配置 curlopt_http_version => curl_http_version_2tls,且未启用连接复用或 hpack 压缩,强行启用无效。

Composer 本身不支持 HTTP/2,它底层依赖的 curl 或 ext-curl 在 PHP 中默认不启用 HTTP/2,更不会自动利用 HPACK 头部压缩或连接复用——这是常见误解的根源。
Composer 默认走 HTTP/1.1,哪怕源站支持 HTTP/2
Composer 的网络请求由 PHP 的 curl 扩展驱动,默认使用 HTTP/1.1。即使 packagist.org 或私有仓库启用了 HTTP/2,Composer 也不会主动协商升级,因为:
• PHP curl 需显式设置 CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_2TLS
• Composer 源码中未配置该选项(截至 2026 年最新稳定版 2.7.x)
• ext-curl 编译时若未链接 nghttp2,HTTP/2 会被直接禁用
• 即便环境满足条件,Composer 也未开启连接池或复用逻辑,每次请求仍新建 TCP 连接
强行启用 HTTP/2 的风险与无效性
有人尝试通过修改 Composer 源码或 patch curl 请求头来“启用 HTTP/2”,但实际效果为零,原因很直接:
• Composer 的请求模式是短生命周期、低频次、高异步依赖解析(如 composer install 期间并发 fetch 数百个 composer.json),根本无法受益于多路复用
• 包元数据请求体极小(通常 • Composer 未实现流控制或 WINDOW_UPDATE 处理,强行发 HTTP/2 帧可能触发服务端重置连接
• Packagist 官方明确不保证 HTTP/2 兼容性,部分 CDN 节点会降级回 HTTP/1.1
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
真正降低 Composer 网络开销的有效方式
与其纠结协议层,不如聚焦 Composer 自身可控的优化点:
• 使用 composer config -g repo.packagist composer https://packagist.org 确保走 HTTPS(避免中间代理降级)
• 启用本地缓存:设置 COMPOSER_CACHE_DIR 环境变量,避免重复下载相同 dist 包
• 关闭非必要功能:添加 --no-suggest --no-plugins --no-scripts 减少额外请求
• 私有仓库优先用 dist 模式而非 source,跳过 Git 克隆开销
• 对高频 CI 场景,部署 toran-proxy 或 satis 作镜像缓存,这才是复用连接+压缩头部的实际落地点
HTTP/2 的多路复用和 HPACK 压缩只在长连接、高频小请求场景下才有意义,比如前端资源加载或 gRPC 服务调用。Composer 的工作流不符合这个前提——它不是瓶颈在协议,而是在包解析、锁文件生成和磁盘 I/O 上。










