点刷新验证码,图片纹丝不动,开发者工具里显示 304 Not Modified,换浏览器就正常,用户以为刷新按钮坏了。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Pragma: no-cache');
验证码接口没设禁止缓存,浏览器按启发式缓存处理,第二次请求带上修改时间,服务端回了 304,页面继续用旧图。服务端其实已经生成了新码。这一点先确认清楚,后面就不用反复试。
「验证码 304」这类改动最怕改一半,回滚脚本先准备好,再动生产。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
具体做法是,响应头加禁止缓存的三个字段,浏览器就不会再发条件请求;图片地址后面拼一个时间戳或随机数,确保每次都是新地址;刷新后对比会话里的码和图片内容,确认是同一张。
改完照着核一遍,每次点刷新都返回 200 和新图片,同一张图不会连续出现两次。
