先问是哪一层有旧副本
一个资料页打开时,可能有浏览器自己的缓存,也可能经过多人共用的中间缓存。RFC 9111 用是否供多位用户复用来区分共享与专用缓存,不是只按服务器离读者远近判断。报告里若只写页面有缓存,很难知道该去看哪层。可以先记响应头、当前会话和现象所在环境,再说明能否确认是哪类缓存。比如一台设备有旧页面不意味着第二位读者也一定收到同一个旧副本;若没有两边的记录,不从一个浏览器现象推断共享层的行为。
普通 private 管的是共享层
规范规定不带限定参数的 private 不让共享缓存存储响应,专用缓存则可以在其他规则允许时保存。这里的可以不是必须;浏览器仍会根据其他条件决定是否复用。做资料故障笔记时,可在这一项下写共享层不应保存、专用层需另查,而非所有地方都无缓存。若头字段带了参数,还应按具体字段范围读,不能把本文举的不带参数情形硬套过去。看到 private 后也不要把它直接翻成页面是私人可见,访问控制是另一个问题。
no-store 的限制对象和含义不同
规范对响应 no-store 的说明是缓存不得保存对应的请求或响应,也不能拿这个响应满足其他请求。和 private 对照时,一项区分共享与专用,另一项限制存储本身。读响应头可先照录指令,再为要解释的环境写一行效果。缓存约束并非已从所有设备清理旧文件的证明,也不是隐私保护的唯一措施;RFC 特别提醒不能依靠这项指令保证隐私。若实际核验需要确认没有旧内容,应另外检查对应请求与环境,不能只抄一个标志。
把规范结论与实测结果分开写
对公开资料页可以分别记录预期和观察:响应标出某指令,所以符合规范的某类缓存应怎样处理;本次用某个环境打开,实际看到的是哪个版本。若实际结果不同,先确认是否查看了最终请求、是否有其他指令或另外的资源请求,再判断。文章只解释缓存语义,不用缓存头说明某个名为麻将胡了2的产品有何服务,不从字段名称推断用户身份,也不建议把任何访问控制或敏感信息保护交给单一头字段。
常见问题
Q1 问:private 是禁止所有缓存吗?
A1 答:不是,普通 private 主要限制共享缓存。
Q2 问:no-store 能证明以前的副本已经全被清理吗?
A2 答:不能,应独立核对旧副本和本次请求。
Q3 问:private 代表页面已经设置登录权限吗?
A3 答:不代表,缓存指令不是访问权限。