composer不读cache-control响应头,元数据缓存完全由本地cache-ttl配置驱动,默认600秒(10分钟),无视max-age、etag等http头,仅依据文件时间戳和该配置强制重拉。

Composer 不读 Cache-Control 响应头,无论镜像站返回 max-age=86400 还是 s-maxage=300,它都无视——元数据缓存行为完全由本地配置驱动。
Composer 元数据缓存根本不解析 HTTP 缓存头
你用 curl -I https://mirrors.aliyun.com/composer/packagist.org/packages.json 看到的 Cache-Control: public, s-maxage=300 只对 CDN 和浏览器生效,Composer 的 HTTP 客户端(基于 cURL 封装)压根不解析这些字段。它既不发 If-None-Match,也不检查 ETag 或 Last-Modified,更不会根据 max-age 决定是否跳过请求。
- 默认每 15 分钟强制重拉
packages.json,只看本地文件时间戳 +cache-ttl配置 - 即使镜像返回
304 Not Modified,Composer 也不会发条件请求——它要么用缓存,要么全量 GET - 所有主流国内镜像(阿里云、清华、腾讯)已明确禁用响应头干预,因为“没用”
真正控制元数据拉取频率的只有 cache-ttl
cache-ttl 是唯一影响 packages.json 和 provider-*.json 缓存时长的配置项,默认值为 600(10 分钟),不是 15 分钟——后者是部分镜像文档误传,实际以 Composer 源码和 composer config --list 输出为准。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 全局修改:
composer config -g cache-ttl 15552000(设为 6 个月) - 项目级覆盖:在
composer.json中加"config": {"cache-ttl": 3600} - 临时生效:
COMPOSER_CACHE_TTL=300 composer update - 设太小(如
1)会导致高频重拉,可能触发镜像站429 Too Many Requests
为什么 --refresh 不等于绕过 HTTP 缓存
composer update --refresh 的行为与 HTTP 缓存无关:它不加任何条件请求头,而是直接删除 ~/.composer/cache/repo/ 下对应源的全部元数据文件(packages.json、provider-*.json),再发起全新 GET 请求。
- 它绕过的是本地 TTL 判断,不是服务器端缓存逻辑
- 清掉的是元数据缓存,不影响
~/.composer/cache/files/(ZIP 包) - 仅 Composer ≥ 2.5 支持;老版本必须手动
rm -rf ~/.composer/cache/repo/https---mirrors-aliyun-com-composer - 别和
--no-cache混用:--no-cache是每次命令都跳过本地缓存,--refresh是一次性清空再重拉
vcs 缓存和 dist 缓存完全独立于 cache-ttl
如果你改了 cache-ttl 却发现私有 Git 仓库的新 tag 还是不生效,问题大概率出在 cache-vcs-ttl(默认 900 秒)或 cache-files-ttl(控制 ZIP 包复用)上。
-
cache-vcs-ttl管 Git 克隆副本(~/.composer/cache/vcs/),改它才影响git@xxx类依赖的更新感知 -
cache-files-ttl才决定已下载的 ZIP 是否被复用;设为0并不会“实时拉新”,只是让 Composer 每次都去校验本地 ZIP 是否过期 - 三者互不干扰:
cache-ttl≠cache-files-ttl≠cache-vcs-ttl,改错地方毫无效果
真正容易被忽略的是:镜像元数据同步延迟(5–30 分钟)和本地缓存路径转义规则——删错 repo/ 子目录名(比如把 https---mirrors-aliyun-com-composer 写成 https://mirrors.aliyun.com/composer)会导致清理无效。










