composer 2.0+ 默认启用 secure-http,http 报错主因是项目级 config 覆盖全局设置或 repositories 中存在 http:// 协议仓库;应检查并删除 composer.json 中的 "secure-http": false,或为 http 仓库添加 "allow_ssl_downgrade": true。

Composer 2.0+ 默认已启用 secure-http,无需额外设置;如果你遇到 HTTP 被拒、Your configuration does not allow connections to http:// 等错误,说明配置被意外关闭,或项目中硬编码了 HTTP 仓库——问题不在“怎么开”,而在“哪里关了”或“哪里写了 http://”。
检查当前 secure-http 实际值
别猜,直接查。Composer 的全局配置可能被覆盖,项目级配置又会完全屏蔽全局值:
- 运行
composer config -g secure-http:看输出是否为true(默认值) - 再运行
composer config secure-http(不加-g):如果项目composer.json里有"config": { "secure-http": false },这个命令会返回false,且它优先生效 - 若两者不一致,问题一定出在项目级配置上;此时删掉
composer.json中的config.secure-http字段最干净
为什么 composer config -g secure-http true 有时没用
因为项目 composer.json 的 config 段是全量覆盖,不是合并。哪怕你全局设了 true,只要项目里写了 "secure-http": false,它就彻底失效:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 常见诱因:从旧项目复制了
composer.json,或 CI 脚本里执行过composer config secure-http false - 验证方式:
composer config --list | grep secure-http,注意看输出里带(local)还是(global) - 修复方法:编辑项目
composer.json,删掉整个"config": { ... }块,或至少移除其中的"secure-http"键
HTTP 仓库报错不是 secure-http 没开,而是 repositories 写了 http://
Composer 在解析 composer.json 阶段就扫描所有 repositories.url,只要任意一条是 http:// 开头,立刻报错退出——和 secure-http 值无关:
- 典型错误位置:
"repositories": [ { "url": "http://packages.internal.company" } ] - 正确做法:目标服务支持 HTTPS 就直接改协议;不支持则必须在该仓库对象内加
"allow_ssl_downgrade": true(不是secure-http: false) - 切记:
"allow_ssl_downgrade": true必须写在对应仓库对象里,写到根节点或config下无效 - JSON 格式错误(如多逗号、引号不闭合)会导致整个
repositories被忽略,错误可能变成更模糊的No packages found
CI/CD 和 Docker 中最容易漏掉的点
基础镜像里的 Composer 版本可能老旧,或预置了不安全的全局配置,导致本地正常、线上失败:
- 构建时显式升级:
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer - CI 脚本开头加校验:
composer config -g secure-http || (echo "ERROR: secure-http disabled"; exit 1) - 避免挂载本地
~/.composer/config.json到容器——里面可能含secure-http false或私有 token - 华为云等镜像 URL 必须以
/结尾,且键名严格为repo.packagist,写成repos.packagist会被静默忽略
真正卡住人的往往不是配置命令本身,而是项目级 config 覆盖了全局、repositories 里混着 http:// 却以为只是网络问题、或者镜像 URL 少了个斜杠导致 404 后 fallback 到 HTTP 被拦截——这些细节不逐项排除,光改 secure-http 没用。










