Clear-Site-Data
用法
部署有问题的资源、轮换认证 token 或让用户登出,都会造成需要清除陈旧客户端数据的情形。引导用户手动清除缓存并不可靠。Clear-Site-Data 头为服务器提供了一种声明式的方式,可在单个响应中清除特定类别的已存储数据。
该头接受一个或多个带引号的字符串指令,用于指定要清除哪些数据类型。多个指令以逗号分隔。通配符 ”*” 会清除一切,包括规范未来修订中新增的数据类型。
该头仅在 HTTPS 上生效。浏览器会忽略非安全 HTTP 响应上的该头。“cookies” 的作用范围延伸到整个注册域名及其所有子域名,这意味着来自 example.re 的 Clear-Site-Data 响应也会清除由 stage.example.re 设置的 Cookie。
一种常见的部署模式是将该头附加到登出端点。服务器以带有 Clear-Site-Data 的响应回应登出请求,一次性清除会话 Cookie、缓存资源和本地存储。另一种模式是在一次失败部署后临时提供一个专用的缓存清除 URL,让运维人员无需等待缓存过期即可强制访问者使用新资源。
注意
在每个响应上发送 Clear-Site-Data 实际上会禁用整站的缓存。每次页面加载都会清除浏览器缓存,导致明显的性能下降。请将该头限制在有针对性的响应上,例如登出端点、错误恢复页面或临时的缓存清除 URL。
注意
所有主流浏览器都支持 Clear-Site-Data 头。Safari 支持除 “executionContexts” 以外的所有指令,并强制执行源分区,防止跨站 iframe 清除第一方数据。
“cache”
清除该源的浏览器 HTTP 缓存。某些实现还会清除相关缓存,包括预渲染页面、前进-后退缓存条目、脚本缓存、WebGL 着色器缓存和地址栏建议。
“cookies”
清除注册域名及其所有子域名的所有 Cookie。同时清除与该源关联的 HTTP 认证凭据。其作用范围比其他指令更广,因为 Cookie 域名匹配包含父级和同级子域名。
“storage”
清除该源的 DOM 存储。这包括 localStorage、sessionStorage、IndexedDB 数据库、Service Worker 注册、Web SQL 数据库(已弃用)、FileSystem API 数据和插件数据。
“executionContexts”
重新加载该源的所有浏览上下文。浏览器会在每个与该源关联的已打开标签页或框架上执行相当于 location.reload() 的操作。该指令是实验性的,尚未被广泛实现。
Chromium 特有扩展
“clientHints”、“prefetchCache” 和 “prerenderCache” 指令是 Chromium 特有的扩展,未在 W3C Clear Site Data 规范中定义。规范定义的指令为 “cache”、“cookies”、“storage”、“executionContexts” 和 ”*“。这些 Chromium 扩展仅在基于 Chromium 的浏览器中生效,Firefox 或 Safari 无法识别。
“clientHints”
清除通过 Accept-CH 头设置的已存储客户端提示偏好。Chromium 特有扩展。清除 “cache”、“cookies” 或 ”*” 也会自动清除客户端提示。
“prefetchCache”
清除作用域限定于 referrer 源的 Speculation Rules 预取缓存。Chromium 特有扩展。适用于在登录或登出等状态变更后丢弃陈旧的预取内容。带有该指令的头在任何同站 HTTP 响应上都生效。
“prerenderCache”
清除作用域限定于 referrer 源的 Speculation Rules 预渲染缓存。Chromium 特有扩展。与 “prefetchCache” 配对使用可清除所有推测性加载缓存。一个从 JavaScript 拉取数据的客户端渲染应用会在状态变更时使用 “prerenderCache” 丢弃预渲染的页面,同时保留预取的 HTML 完好无损。
”*“(通配符)
清除该源的所有数据类型,包括规范中未来新增的任何指令类型。这是执行完整清理最安全的选择,对浏览体验的影响也最广。
示例
一个登出端点清除会话 Cookie 和存储。浏览器会清除该域名(包括子域名)的所有 Cookie,移除 localStorage 和 IndexedDB 数据,并丢弃缓存资源。
Clear-Site-Data: "cache", "cookies", "storage"
一次失败部署后仅针对缓存的清除。服务器临时将该头附加到响应上,直到访问者已切换到新资源。
Clear-Site-Data: "cache"
使用通配符的完整清理。所有缓存数据、Cookie、存储以及任何未来的数据类型都会被移除。常见于账户删除确认页面。
Clear-Site-Data: "*"
在状态变更后仅清除推测性加载缓存。登录事件之前的预取和预渲染页面会被丢弃。
Clear-Site-Data: "prefetchCache", "prerenderCache"