Clear-Site-Data
使い方
壊れたアセットの配信、認証トークンのローテーション、ユーザーのログアウトはいずれも、古くなったクライアント側のデータを消す必要がある状況を生みます。手動でのキャッシュ削除をユーザーに案内する方法は当てになりません。Clear-Site-Data ヘッダーは、1 回のレスポンスで特定の種類の保存データを宣言的に破棄する手段をサーバーに与えます。
このヘッダーは、消去するデータの種類を指定する 1 つ以上の引用符付き文字列のディレクティブを受け付けます。複数のディレクティブはカンマで区切ります。ワイルドカード ”*” は、将来の仕様改訂で追加されるデータ型も含めてすべてを消去します。
このヘッダーは HTTPS でのみ機能します。安全でない HTTP のレスポンスでは、ブラウザはこのヘッダーを無視します。“cookies” の作用範囲は登録ドメイン全体とそのすべてのサブドメインに及ぶため、example.re からの Clear-Site-Data のレスポンスは stage.example.re が設定した cookie も消去します。
よくある導入パターンは、ログアウトのエンドポイントにこのヘッダーを付けることです。サーバーはサインアウトのリクエストに Clear-Site-Data で応答し、セッション cookie、キャッシュされたリソース、ローカルストレージを一度に消去します。もう 1 つのパターンは、問題のあるデプロイの後に一時的に提供する専用のキャッシュバスティング用 URL です。これにより、運用担当者はキャッシュの期限切れを待たずに訪問者へ新しいアセットを届けられます。
注意
すべてのレスポンスで Clear-Site-Data を送ると、実質的にそのサイトのキャッシュが無効になります。ページを読み込むたびにブラウザのキャッシュが破棄され、目に見える性能低下を招きます。このヘッダーは、ログアウトのエンドポイント、エラー復旧のページ、一時的なキャッシュバスティング用 URL といった限定的なレスポンスに絞って使ってください。
注意
主要なブラウザはすべて Clear-Site-Data ヘッダーをサポートしています。Safari は “executionContexts” を除くすべてのディレクティブをサポートし、オリジンのパーティショニングを強制することで、クロスサイトの iframe がファーストパーティのデータを消去するのを防ぎます。
“cache”
そのオリジンに対するブラウザの HTTP キャッシュを消去します。実装によっては、事前描画されたページ、back-forward cache のエントリ、スクリプトキャッシュ、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”
リファラーのオリジンにスコープされた Speculation Rules のプリフェッチキャッシュを消去します。Chromium 固有の拡張です。ログインやログアウトのような状態変化の後に、古くなったプリフェッチ済みのコンテンツを破棄するのに役立ちます。このディレクティブを伴うヘッダーは、同一サイトのあらゆる HTTP レスポンスで機能します。
“prerenderCache”
リファラーのオリジンにスコープされた 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"