composer一看到http://就报错,是因为2.0+版本默认secure-http=true,且在解析composer.json阶段即扫描repositories中所有url,只要存在"http://"开头的条目便立即终止执行,不发起任何网络请求。

Composer为什么一看到http://就报错?
不是它“不支持HTTP”,而是从2.0版本起,secure-http默认为true,且校验发生在composer.json解析阶段——只要repositories数组里任意一条"url": "http://...",Composer直接退出,连vendor/目录都不碰。错误信息通常是:Your configuration does not allow connections to http://...或The 'http://' URL 'http://xxx' is not allowed。
- 这个检查不依赖网络请求,也不等下载开始,是纯静态 JSON 字段扫描
-
secure-http设为false或全局执行composer config --global secure-http false,在 Composer 2.5+ 中已无效,必须配合--no-secure-http运行时参数 - JSON 格式错误(比如
repositories里多了一个逗号)会导致整个块被忽略,错误可能变成更模糊的No packages found,而不是明确提示 HTTP 问题
如何让某个内网仓库继续用HTTP?
别关secure-http,也别改全局配置——只对特定仓库显式声明降级许可。这个字段必须写在对应仓库对象内部,写到根节点或config里完全无效。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(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 } ] } -
"allow_ssl_downgrade": true仅对该仓库生效,其他 HTTPS 源照常校验 - 如果目标服务实际支持 HTTPS,优先改成
"url": "https://...",再配有效证书;allow_ssl_downgrade只是兜底,不是推荐路径 - 该字段不解决 SSL 证书错误(如
cURL error 60),只绕过协议拦截;证书问题需另配ssl.cafile
为什么换了HTTPS镜像还是走HTTP?
因为 Packagist 官方源在 Composer 2.0+ 中是硬编码特殊处理的,composer config --global repo.packagist.org https://packagist.org这类命令根本不会生效——它只影响自定义仓库,不影响官方源逻辑。
- 真正控制协议的是
secure-http全局开关:运行composer config --global secure-http true(虽默认已是true,但可确认) - 国内镜像如阿里云、腾讯云,必须用
https://mirrors.aliyun.com/composer/这类 HTTPS 地址,并通过composer config --global repos.packagist.type composer+composer config --global repos.packagist.url https://...方式设置,不能直接覆盖repo.packagist.org - 旧镜像残留配置容易被忽略:运行
composer config --global --unset repos.packagist先清空,再重设 - 验证是否生效:跑
composer update -vvv 2>&1 | grep "Downloading",输出里只应有https://开头的地址
SSL证书失败和secure-http是两回事
cURL error 60、SSL handshake failed或unable to get local issuer certificate,跟secure-http开关无关——这是 OpenSSL 拒绝信任服务端证书,常见于私有 Git、内网 Packagist 或企业代理环境。
- 别碰
secure-http false,它只会掩盖问题,让流量明文裸奔 - 正确做法是配
ssl.cafile:运行composer config --global ssl.cafile /path/to/cacert.pem,确保 PHP 进程有读取权限(例如容器中用www-data用户,证书不能放在/root/下) - 证书路径写错或格式不对时,Composer 会静默 fallback 到系统默认 CA,然后继续报错——你根本看不到加载失败提示
- 私有仓库 URL 必须自己写成
https://开头,secure-http不会帮你补协议;服务端没开 HTTPS,光配客户端也没用
composer.json加载后、任何包下载前;哪怕只有一条http:// URL,整个命令就终止——没有“部分生效”或“降级尝试”。










