インターネット技術標準化タスクフォース(IETF) M. Nottingham
Request for Comments: 9875 Cloudflare
分類: 標準化作業 2025年10月
ISSN: 2070-1721

HTTP キャッシュグループ


要約

本仕様は、HTTPキャッシュ内の保存されたレスポンス同士の関係を記述する手段を導入し、保存レスポンスを1つ以上の文字列に関連付けることでグループ化します。

このメモのステータス

本書はインターネット標準化トラック文書です。

本書はインターネット技術標準化タスクフォース(IETF)の成果物です。本書は IETF コミュニティのコンセンサスを表しており、パブリックレビューを受け、さらにインターネット技術指導グループ(IESG)による公開の承認を受けています。インターネット標準に関するさらなる情報はRFC 7841のセクション2を参照してください。

本書の現状、訂正情報、およびフィードバックの提供方法についてはhttps://www.rfc-editor.org/info/rfc9875でご確認いただけます。

Copyright Notice

Copyright (c) 2025 IETF Trust and the persons identified as the document authors. All rights reserved.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.


1. はじめに

HTTPキャッシュ[HTTP-CACHING]は、単一リソースの粒度で動作します。一つの保存レスポンスの新鮮さは他のレスポンスには影響しません。この粒度はキャッシュを効率的にすることができ、例えばページが異なるキャッシュ要件を持つ多くのアセットで構成される場合に有効です。

しかし、保存レスポンス間の関係性を活用することで、キャッシュ効率を向上できる場合もあります。

例えば、関連するリソースのセットを無効化する必要がよくあります。これは状態を変更するリクエストが他のリソースにも副作用を及ぼす場合や、単に管理上の理由(例:「サイトのこの部分を無効化」)による場合があります。レスポンスをグループ化することは、これらの関係を表現する専用の方法を提供し、URL構造などに頼る必要がなくなります。

無効化イベントの共有に加えて、グループ化によって示される関係は、キャッシュがその動作を最適化するため(例: キャッシュ排除アルゴリズムの運用を通知するなど)にも利用できます。

セクション2では、HTTPキャッシュ内の保存レスポンス同士の関係を記述するために、それらのレスポンスをそれらの関係を反映した1つ以上のグループへ関連付ける手段を導入します。また、キャッシュがその情報を利用してグループ内メンバーに無効化イベントを適用する方法についても述べます。

セクション3では、そのようなイベントの新たな発生源として、状態変更レスポンスがグループ無効化を引き起こすことを可能にするHTTP応答ヘッダーフィールドを紹介します。

これらの仕組みは、一つのキャッシュ内、かつ単一オリジンサーバーに関連付けられた保存レスポンス間で動作します(セクション2.1参照)。それらは、複数のキャッシュ間で状態を同期する問題(例: 階層やメッシュ内)や、異なるオリジンの保存レスポンスの関連付けには対応していません。

1.1. 記法の規則

本書で使われている"MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"NOT RECOMMENDED"、"MAY"、"OPTIONAL"というキーワードは、 BCP 14 [RFC2119] [RFC8174] で説明されている通り、かつここに示すように全て大文字の場合のみに該当します。

本仕様では、[STRUCTURED-FIELDS]から以下の用語を使用します: List(リスト)、String(文字列)、およびParameter(パラメータ)。


2. Cache-Groups応答ヘッダーフィールド

Cache-Groups応答ヘッダーフィールドは、文字列のリスト(3.1 および 3.3.3 [STRUCTURED-FIELDS] 参照)です。リストの各メンバーは、そのレスポンスが属するグループを識別する値です。これらの文字列は不透明であり、発行サーバーには意味があるかもしれませんが、キャッシュはその構造や内容を(グループを一意に識別する以外は)解釈しません。

HTTP/1.1 200 OK
Content-Type: application/javascript
Cache-Control: max-age=3600
Cache-Groups: "scripts"

メンバーの順序に意味はありません。認識されないパラメータは無視するものとします。

実装は1つのフィールド値内に少なくとも32個のグループと各メンバーは最大32文字までをサポートしなければなりません(MUST)。ただし、HTTPフィールド長の一般的な制限により実際のサイズが制約される場合があります。

2.1. グループ化されたレスポンスの識別

同じキャッシュ内に保存されている2つのレスポンスが、以下全ての条件を満たすとき、同じグループに属するとみなします:

  1. 両方のレスポンスにCache-Groups応答ヘッダーフィールドが含まれ、そのリスト内の任意の位置に同じ文字列が(大文字小文字を区別して)含まれる。

  2. 両方が同じURIオリジン(セクション4.3.1 [HTTP]参照)を持つ。

2.2. キャッシュ動作

2.2.1. 無効化

キャッシュが保存されたレスポンスを無効化する場合、そのレスポンスとグループを共有する(セクション2.1)他の保存レスポンスも無効化してもよい(MAY)。ただし、グループ化による無効化が連鎖することはなく、この仕組みはカスケードしません。

キャッシュ拡張によって、上記の要件を明示的に強めることができます。例えば、ターゲット型キャッシュ制御ヘッダーフィールド[TARGETED]は、それを処理するキャッシュに対し、該当レスポンスの無効化を求めることがあります。


3. Cache-Group-Invalidation応答ヘッダーフィールド

Cache-Group-Invalidation応答ヘッダーフィールドは文字列のリストです(3.1, 3.3.3 [STRUCTURED-FIELDS]参照)。リストの各メンバーは、そのレスポンスが無効化するグループ(セクション2.2.1参照)を識別する値です。

例えば、2つのキャッシュグループに副作用を持つPOSTリクエストのあと、該当するレスポンスはこれらのグループのいずれかまたは両方に関連する保存レスポンスを無効化するべきであることを次のように示せます:

HTTP/1.1 200 OK
Content-Type: text/html
Cache-Group-Invalidation: "eurovision-results", "australia"

Cache-Group-Invalidation ヘッダーフィールドは、安全なメソッドのリクエスト(例: GET、セクション9.2.1 [HTTP] 参照)へのレスポンスでは無視されなければなりません(MUST)

キャッシュは、非安全リクエストに対するレスポンスでCache-Group-Invalidation ヘッダーフィールドを受信した場合、そのリスト内いずれかのグループとグループを共有する(セクション2.1参照)保存レスポンスを無効化してもよい(MAY)です。

キャッシュ拡張によって、上記の要件を明示的に強めることができます。たとえば、ターゲット型キャッシュ制御ヘッダーフィールド[TARGETED]は、キャッシュがCache-Group-Invalidationシグナルを尊重することを要求する場合があります。

メンバーの順序に意味はありません。認識されないパラメータは無視するものとします。

実装は1つのフィールド値内に少なくとも32個のグループと各メンバーは最大32文字までをサポートしなければなりません(MUST)。一般的なHTTPフィールド長の制約により実際のサイズが制限される場合があります。


4. IANAに関する事項

IANAは「Hypertext Transfer Protocol (HTTP) Field Name Registry」に以下の項目を追加しました:

フィールド名:
Cache-Groups
ステータス:
permanent
参照:
RFC 9875
フィールド名:
Cache-Group-Invalidation
ステータス:
permanent
参照:
RFC 9875

5. セキュリティに関する考察

この仕組みにより、同じオリジンを共有するリソース相互の無効化が可能になります。そのため、マルチパーティ(「共有ホスティング」と呼ばれることもあります)を代表するオリジンでは、あるパーティが他者のリソースと自身のリソースを同じグループにしたり、他者への副作用を持つ信号を送信できる場合があります。

こうしたリスクを低減したい共有ホストは、本仕様で定義されるヘッダーフィールドへのアクセスを制御できます。

6. 参考文献

6.1. 規範的参考文献

[HTTP-CACHING]
Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, Ed., “HTTP Caching”, STD 98, RFC 9111, DOI 10.17487/RFC9111, June 2022, <https://www.rfc-editor.org/info/rfc9111>.
[HTTP]
Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, Ed., “HTTP Semantics”, STD 97, RFC 9110, DOI 10.17487/RFC9110, June 2022, <https://www.rfc-editor.org/info/rfc9110>.
[RFC2119]
Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels”, BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <https://www.rfc-editor.org/info/rfc2119>.
[RFC8174]
Leiba, B., “Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words”, BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, <https://www.rfc-editor.org/info/rfc8174>.
[STRUCTURED-FIELDS]
Nottingham, M. and P-H. Kamp, “Structured Field Values for HTTP”, RFC 9651, DOI 10.17487/RFC9651, September 2024, <https://www.rfc-editor.org/info/rfc9651>.

6.2. 参考情報

[TARGETED]
Ludin, S., Nottingham, M., and Y. Wu, “Targeted HTTP Cache Control”, RFC 9213, DOI 10.17487/RFC9213, June 2022, <https://www.rfc-editor.org/info/rfc9213>.

謝辞

Stephen Ludin氏のレビューとご意見に感謝します。


著者連絡先

Mark Nottingham
Cloudflare
Melbourne
Australia
EMail: mnot@mnot.net
URI: https://www.mnot.net/