用户反馈刷新后头像是其他人的,检查发现接口响应被节点缓存了。乍看像缓存或者权限的锅,追下去往往不是。

Cache-Control: private, no-store
# 规则
# /api/* -> 不缓存

追下去是这么回事:缓存规则按路径前缀生效,把带登录态的接口也纳入缓存,且未区分身份。

「接口被缓存」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

具体做法是,把接口排除出缓存;按身份区分缓存键;对私有响应声明不缓存。

验收就看一点,不同用户拿到的接口数据正确,不再串号。

作者 9823189