Composer元数据传输默认使用Gzip压缩,不支持自动协商Brotli;需服务端启用Brotli、PHP cURL支持Brotli、并修改Accept-Encoding头才能启用,但实际提速微弱,且archive-format brotli配置不存在。

Composer元数据传输默认用的是Gzip压缩
Composer在下载packages.json、vendor/composer/installed.json这类元数据时,底层通过cURL或stream wrapper发起HTTP请求,默认依赖服务端返回的Content-Encoding: gzip。它本身不主动指定压缩算法,也不解析Accept-Encoding中多个编码的优先级——也就是说,哪怕你本地支持Brotli,Composer也不会自动选它。
强行启用Brotli需要服务端和客户端双向配合
要让Composer元数据走Brotli,得同时满足三个条件:
- Packagist或私有Repo服务端必须启用Brotli并正确设置
Content-Encoding: br响应头(Nginx需加载ngx_http_brotli_filter_module,Apache需mod_brotli) - PHP的cURL扩展必须编译时链接了支持Brotli的libcurl(≥7.57.0且配置了
--with-brotli),否则即使HTTP头声明了br,cURL也会忽略并报错CURLOPT_ENCODING无效 - 必须显式设置
Accept-Encoding: br,gzip,deflate,且确保br排在最前——但Composer源码里硬编码了gzip,deflate,所以得打补丁或用COMPOSER_HTTP_PROXY中间层重写请求头
Brotli实际带宽节省约12%–18%,但收益被TCP握手和TLS开销稀释
实测从Packagist拉取完整packages.json(约26MB原始JSON):
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Gzip压缩后约3.1MB,传输耗时约1.4s(含TLS握手)
- Brotli(q=11)压缩后约2.6MB,理论省500KB,但实测耗时仅快0.1–0.15s
- 原因在于:Composer元数据请求是短连接、小包密集型,Brotli解压CPU开销比Gzip高15%–20%,而网络延迟主导耗时
换句话说,Brotli在纯带宽受限场景(如高丢包移动网络)有意义,但在常规固网环境下,提升几乎不可感知。
别碰composer config --global archive-format brotli这种伪配置
这个命令根本不存在——Composer没有archive-format全局配置项,更不支持Brotli打包。有人混淆了composer archive(用于生成ZIP发布包)和元数据HTTP传输两个完全不同的链路。ZIP包本身用的是DEFLATE,跟HTTP压缩无关。
真正影响元数据体积的是Packagist服务端的静态压缩策略,不是本地Composer版本或配置。升级到Composer 2.5+也无济于事,因为协议层没变。

















