Composer 2.0+ 默认硬性禁止 HTTP 连接,解析 composer.json 阶段即扫描 repositories 中所有 http:// URL 并报错;修复需全量检查并替换为 HTTPS,或对可信内网仓库单独配置 "allow_ssl_downgrade": true。

Composer 默认拒绝任何 HTTP 连接,不是配置错了,而是它从 2.0 版本起就硬性禁止了——哪怕你 ping 得通、curl 能拿到响应,只要 URL 是 http://,它就会在解析 composer.json 阶段直接报错退出。
检查 composer.json 里的 repositories 是否含 http://
这是最常被忽略的根源。Composer 不是等下载时才校验协议,而是在读取配置阶段就扫描所有 repositories 的 url 字段。只要其中任意一条是 http:// 开头,哪怕其他仓库全是 HTTPS,也会触发 Your configuration does not allow connections to http://... 错误。
- 打开
composer.json,逐条检查repositories数组中的url值 - 常见错误写法:
"url": "http://packages.internal.company"、"url": "http://localhost:8080" - 如果目标服务支持 HTTPS,直接改成
https://;不支持则必须显式声明可信 - 注意:改完后要删掉
vendor/和composer.lock,再运行composer install,否则旧锁文件可能缓存错误源信息
为单个 HTTP 仓库启用 allow_ssl_downgrade
比全局关掉 secure-http 更安全的做法:只对明确可信的内网仓库放宽限制,不影响其他 HTTPS 源。这个字段必须写在对应仓库对象里,不能提级到根节点。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 正确写法示例:
{ "repositories": [ { "type": "composer", "url": "http://packages.internal.company", "allow_ssl_downgrade": true } ] } - 该设置仅对该仓库生效,Composer 会跳过对该 URL 的 HTTPS 强制校验
- 不推荐和
"options": { "ssl": { "verify_peer": false } }混用——后者绕过证书验证,但不解决协议拦截问题 - 注意 JSON 格式合法性:多一个逗号、引号不闭合,整个
repositories会被忽略,错误可能变成更模糊的“no packages found”
全局或项目级禁用 secure-http(仅限开发环境)
Composer 2.5+ 开始,composer config secure-http false 在项目目录下执行已无效——它只写入项目 composer.json,而 Composer 优先读取全局配置(~/.composer/config.json)。真正生效的命令必须带 --global,且需配合 --no-secure-http 参数才能绕过运行时校验。
- 临时允许当前命令:运行
composer update --no-secure-http(仅当次生效) - 全局关闭(不推荐):
composer config --global secure-http false,然后确认生效:composer config --global --list | grep secure-http - 项目级关闭(实际仍走全局):目前无可靠方式,除非你彻底移除全局配置并用环境变量覆盖:
COMPOSER_NO_SECURE_HTTP=1 composer install - 执行后务必
composer clear-cache,否则旧元数据可能继续触发 HTTPS fallback
为什么改了配置还是报错?几个关键盲点
很多人按教程改完配置仍失败,问题往往出在这些隐性环节:
-
composer.json中存在多个repositories,只改了一个,其余仍有http://——必须全部清理或标记allow_ssl_downgrade - 用了国内镜像但 URL 少了结尾斜杠,例如
https://mirrors.aliyun.com/composer(缺/),某些 Composer 版本会拼成.../composer/packages.json导致 404,继而 fallback 到 HTTP 地址并触发拦截 - PHP 的 OpenSSL 扩展未启用,或系统 CA 证书路径异常(尤其 Docker 容器或 Alpine 系统),导致 HTTPS 握手失败,Composer 可能误判为“连接不可用”而尝试降级——但它不会真降级,只会报错
- 某些 IDE 内置终端继承了代理环境变量(
http_proxy),而代理本身不支持 CONNECT 方法,结果表现为Connection refused,看起来像网络问题,实则是代理层拦截
真正麻烦的从来不是加一行 "allow_ssl_downgrade": true,而是得确认这一行没被 JSON 语法吃掉、没被其他仓库配置覆盖、没被缓存绕过、也没被代理或 OpenSSL 层悄悄拦住——HTTP 连接被拒,90% 的时间你其实在调试网络栈,而不是 Composer 本身。

















