ETagの再検証は保存表現とサーバーの期待を比較し、条件付きGETの一致結果である304で保存内容を再利用できます。

保存応答と比較トークンの概念図

実測の通信ではなく概念図です。

検証子と鮮度の時計は異なる

ETagは表現を比較する不透明な識別子で、時計やアクセス許可のトークンではありません。内容が変わらなくても保存応答は古くなり得ます。鮮度は適用される規則で再利用できるかを問い、再検証は確認後も保存表現を使えるかを問います。 HTTPの意味論

通信記録では二つを分けます。鮮度期間の経過だけで編集者が新内容を公開したとは判断できません。同じタグが二度見えても、どのキャッシュが返したか、なぜ要求したかは分かりません。URL、メソッド、指示子、検証子を先に記録し、一つの欄を応答の全履歴として読まないようにします。

弱さから生成式を推測しない

ETagは引用符付きの不透明な値です。W/は弱い検証子を示し、バイト同一性なしに意味の同等性を表せます。生成式を指定せず、空白の違いを自動的に同等とするわけでもありません。強い検証子にはより厳格な表現同一性が求められ、バイト範囲などの用途で差が重要です。 タグの解釈

説明用に二つの保存版をAとBと呼びます。実際のETagではありません。サービスがバイトの差を区別するのか意味を同等とするのかを尋ねます。値がハッシュに見えるという推測では答えられません。規則が確認できれば記録し、できなければ生成方法を不明とします。構文だけからファイルシステムの変数や算法は決まりません。

ヘッダーとメソッドで条件を読む

If-None-Matchは強いタグにも弱い比較を使います。エンティティタグが一致するとIf-None-Matchの事前条件は偽になります。その場合GETとHEADは304、他のメソッドは412を使います。If-Matchは強い比較を使う別の事前条件で、単なる逆ではありません。条件を満たしても権限や他の処理と無関係に成功する保証はありません。 条件の規則 If-Matchの定義

二つの記録を比べるとき、タグより先にメソッドを書きます。仮の取得と変更では似た条件でも結果の意味が違います。取得の説明を変更にそのまま移さないでください。同時編集なら最初に見た表現と送った期待値を区別します。ヘッダーがあるだけでは全ての競合を正しく処理した証明になりません。

304と保存本文を併せて読む

304には応答コンテンツがありません。キャッシュは適格な保存応答を選び、例外を含む規則で受信フィールドを更新して保存内容を再利用できます。RFC 9110が要求するのは対応する200に含まれるはずのヘッダーフィールドのうち指定された一部であり、全フィールドではありません。全ヘッダーの一括交換、ディスク限定の操作、自動的な新寿命ではありません。 304応答 保存応答の更新

仮の記録では先の本文付き応答と後の304を一緒に読みます。後の通信だけでは失われた保存本文を供給できません。保持した本文と受け取ったメタデータを別々に書きます。先の応答がなければ304だけから内容を復元できません。その行に本文がないのは再検証の形であり、空の文書を読者に渡した証拠ではありません。

専門的視点でキャッシュ方針を読む

MDNの専門ガイドは個人と共有キャッシュ、no-cacheとno-storeを区別します。修飾のない指示ではno-cacheは再利用前の検証、no-storeは保存禁止、privateは共有保存の制限です。privateはブラウザー保存まで禁止せず、Cookieだけではprivateが設定されません。 方針の説明

何を保存し、どこが保持し、何が再利用や検証を許すかを確認項目にできます。記録にキャッシュや以前の応答がなければ不確実性を残します。304はサーバー全体に変更がない認証ではなく、ETagは内容の安全性の認証でもありません。例は読み方の練習で、CDN測定や帯域、遅延、競合防止の保証ではありません。

出典