答案是secure-http全局开关默认为true,强制拒绝所有http://仓库url;需执行composer config --global secure-http false关闭,并确保composer.json中无http://地址,否则仍报错。

为什么 composer update 突然报 “The 'http://' URL is not allowed”?
不是镜像地址写错了,而是 secure-http 全局开关默认为 true,它直接拦截所有以 http:// 开头的仓库地址——哪怕你只是想试一个内网 HTTP 镜像。
常见错误包括:
- 执行
composer config -g repo.packagist.org https://,但这个字段在 Composer 2.0+ 已被移除,改了也无效 - 以为关掉某个仓库配置就能绕过协议检查,实际校验发生在请求发起前,只看 URL 协议头
- 抓包看到
http://packagist.org/packages.json请求,误判为 Composer 配置没生效,其实是网络层(如代理、防火墙)做了重定向
验证是否生效:临时在 composer.json 里加一条 "url": "http://example.com" 的自定义仓库,再跑 composer update -vvv。如果立刻中断并报错,说明 secure-http 确实开着。
secure-http false 后还是连不上 HTTP 镜像?先排除网络层干扰
关掉 secure-http 只是解除协议拦截,不代表 HTTP 请求一定能通。国内企业环境里,HTTP 流量常被防火墙限速、重置,或代理对 80 端口做深度检测(伪造响应、超时返回),导致 Composer 卡住而非报错。
排查步骤:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 手动验证可用性:
curl -I http://mirrors.example.com/packages.json,必须返回200 OK - 确认是否漏配
http-proxy(HTTP 镜像走明文,https-proxy不生效) - 检查代理行为:某些代理会缓存或篡改
packages.json响应体,用curl -v对比原始响应与 Composer 实际收到的内容 - 优先换 HTTPS 镜像(如阿里云、清华源),不是因为“更安全”,而是 HTTP 镜像在国内实际可用率更低、维护更不可靠
如何让 composer install 真正校验包完整性?
composer.lock 里的 dist.shasum 字段必须存在且为 64 字符(SHA-256),否则校验逻辑不会触发——很多团队误以为只要运行了安装命令就自动安全,其实只是“假装校验”。
关键动作:
- 打开
composer.lock,搜索任意包的"dist"段,确认"shasum": "a1b2c3..."非空且长度为 64 - 运行
composer install --no-scripts --no-plugins,观察输出:若出现Downloading (100%)后无报错,说明校验通过;若有Hash does not match,说明机制生效 - 手动改一个
shasum值为"0000"再运行composer install,必须中止报错;否则说明 lock 文件未被读取,或用了--ignore-platform-reqs等绕过选项 - 生产环境务必加
--prefer-dist,Gitsource方式默认跳过哈希校验
私有仓库依赖为何总提示 “Could not find package”?
根本原因不是镜像没同步,而是 repositories 配置缺失关键字段 type,导致 Composer 直接忽略该源——哪怕 URL 能在浏览器里正常访问。
典型错误配置:
-
"type": ""或"type": "git"(正确应为vcs) - Git 仓库 URL 不带
.git后缀,Composer 无法识别为vcs类型 - Satis 镜像 URL 写成首页(
https://satis.example.com/),实际应为packages.json地址(https://satis.example.com/packages.json) - 没禁用 Packagist fallback:
composer config --global repo.packagist.org false必须执行,否则仍会尝试从官方源找包,造成供应链风险
真正起作用的安全隔离,从来不是“镜像同步了多少公开包”,而是 repositories 显式声明 + type 正确 + repo.packagist.org false 全局关闭 fallback。










