rfc9875.original | rfc9875.txt | |||
---|---|---|---|---|
HTTP M. Nottingham | Internet Engineering Task Force (IETF) M. Nottingham | |||
Internet-Draft 16 May 2025 | Request for Comments: 9875 September 2025 | |||
Intended status: Standards Track | Category: Standards Track | |||
Expires: 17 November 2025 | ISSN: 2070-1721 | |||
HTTP Cache Groups | HTTP Cache Groups | |||
draft-ietf-httpbis-cache-groups-07 | ||||
Abstract | Abstract | |||
This specification introduces a means of describing the relationships | This specification introduces a means of describing the relationships | |||
between stored responses in HTTP caches, "grouping" them by | between stored responses in HTTP caches, "grouping" them by | |||
associating a stored response with one or more strings. | associating a stored response with one or more strings. | |||
About This Document | ||||
This note is to be removed before publishing as an RFC. | ||||
Status information for this document may be found at | ||||
https://datatracker.ietf.org/doc/draft-ietf-httpbis-cache-groups/. | ||||
Discussion of this document takes place on the HTTP Working Group | ||||
mailing list (mailto:ietf-http-wg@w3.org), which is archived at | ||||
https://lists.w3.org/Archives/Public/ietf-http-wg/. Working Group | ||||
information can be found at https://httpwg.org/. | ||||
Source for this draft and an issue tracker can be found at | ||||
https://github.com/httpwg/http-extensions/labels/cache-groups. | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 17 November 2025. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9875. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2025 IETF Trust and the persons identified as the | Copyright (c) 2025 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
1.1. Notational Conventions . . . . . . . . . . . . . . . . . 3 | 1.1. Notational Conventions | |||
2. The Cache-Groups Response Header Field . . . . . . . . . . . 3 | 2. The Cache-Groups Response Header Field | |||
2.1. Identifying Grouped Responses . . . . . . . . . . . . . . 4 | 2.1. Identifying Grouped Responses | |||
2.2. Cache Behaviour . . . . . . . . . . . . . . . . . . . . . 4 | 2.2. Cache Behaviour | |||
2.2.1. Invalidation . . . . . . . . . . . . . . . . . . . . 4 | 2.2.1. Invalidation | |||
3. The Cache-Group-Invalidation Response Header Field . . . . . 4 | 3. The Cache-Group-Invalidation Response Header Field | |||
4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 5 | 4. IANA Considerations | |||
4.1. HTTP Field Names . . . . . . . . . . . . . . . . . . . . 5 | 5. Security Considerations | |||
5. Security Considerations . . . . . . . . . . . . . . . . . . . 6 | 6. References | |||
6. References . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 6.1. Normative References | |||
6.1. Normative References . . . . . . . . . . . . . . . . . . 6 | 6.2. Informative References | |||
6.2. Informative References . . . . . . . . . . . . . . . . . 6 | Acknowledgements | |||
Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 7 | Author's Address | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 7 | ||||
1. Introduction | 1. Introduction | |||
HTTP caching [HTTP-CACHING] operates at the granularity of a single | HTTP caching [HTTP-CACHING] operates at the granularity of a single | |||
resource; the freshness of one stored response does not affect that | resource; the freshness of one stored response does not affect that | |||
of others. This granularity can make caching more efficient -- for | of others. This granularity can make caching more efficient -- for | |||
example, when a page is composed of many assets that have different | example, when a page is composed of many assets that have different | |||
requirements for caching. | requirements for caching. | |||
However, there are also cases where the relationship between stored | However, there are also cases where the relationship between stored | |||
skipping to change at page 3, line 23 ¶ | skipping to change at line 90 ¶ | |||
indicated by grouping can also be used by caches to optimise their | indicated by grouping can also be used by caches to optimise their | |||
operation; for example, it could be used to inform the operation of | operation; for example, it could be used to inform the operation of | |||
cache eviction algorithms. | cache eviction algorithms. | |||
Section 2 introduces a means of describing the relationships between | Section 2 introduces a means of describing the relationships between | |||
stored responses in HTTP caches, by associating those responses with | stored responses in HTTP caches, by associating those responses with | |||
one or more groups that reflect those relationships. It also | one or more groups that reflect those relationships. It also | |||
describes how caches can use that information to apply invalidation | describes how caches can use that information to apply invalidation | |||
events to members of a group. | events to members of a group. | |||
Section 3 introduces one new source of such events: a HTTP response | Section 3 introduces one new source of such events: an HTTP response | |||
header field that allows a state-changing response to trigger a group | header field that allows a state-changing response to trigger a group | |||
invalidation. | invalidation. | |||
These mechanisms operate within a single cache, across the stored | These mechanisms operate within a single cache, across the stored | |||
responses associated with a single origin server (see Section 2.1). | responses associated with a single origin server (see Section 2.1). | |||
They do not address the issues of synchronising state between | They do not address the issues of synchronising state between | |||
multiple caches (e.g., in a hierarchy or mesh), nor do they | multiple caches (e.g., in a hierarchy or mesh), nor do they | |||
facilitate association of stored responses from disparate origins. | facilitate association of stored responses from disparate origins. | |||
1.1. Notational Conventions | 1.1. Notational Conventions | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
This specification uses the following terminology from | This specification uses the following terminology from | |||
[STRUCTURED-FIELDS]: List, String, Parameter. | [STRUCTURED-FIELDS]: List, String, and Parameter. | |||
2. The Cache-Groups Response Header Field | 2. The Cache-Groups Response Header Field | |||
The Cache-Groups HTTP Response Header is a List of Strings (Sections | The Cache-Groups HTTP Response Header is a List of Strings (Sections | |||
3.1 and 3.3.1 of [STRUCTURED-FIELDS]). Each member of the list is a | 3.1 and 3.3.1 of [STRUCTURED-FIELDS]). Each member of the list is a | |||
value that identifies a group that the response belongs to. These | value that identifies a group that the response belongs to. These | |||
strings are opaque -- while they might have some meaning to the | strings are opaque -- while they might have some meaning to the | |||
server that creates them, the cache does not have any insight into | server that creates them, the cache does not have any insight into | |||
their structure or content (beyond uniquely identifying a group). | their structure or content (beyond uniquely identifying a group). | |||
skipping to change at page 4, line 37 ¶ | skipping to change at line 152 ¶ | |||
2. They both share the same URI origin (per Section 4.3.1 of | 2. They both share the same URI origin (per Section 4.3.1 of | |||
[HTTP]). | [HTTP]). | |||
2.2. Cache Behaviour | 2.2. Cache Behaviour | |||
2.2.1. Invalidation | 2.2.1. Invalidation | |||
A cache that invalidates a stored response MAY invalidate any stored | A cache that invalidates a stored response MAY invalidate any stored | |||
responses that share groups (per Section 2.1) with that response. | responses that share groups (per Section 2.1) with that response. | |||
Note that further grouped invalidations are not triggered by a | Note that further grouped invalidations are not triggered by a | |||
grouped invalidation; i.e., this mechanism does not "cascade." | grouped invalidation; i.e., this mechanism does not "cascade". | |||
Cache extensions can explicitly strengthen the requirement above. | Cache extensions can explicitly strengthen the requirement above. | |||
For example, a targeted cache control header field [TARGETED] might | For example, a targeted cache control header field [TARGETED] might | |||
specify that caches processing it are required to invalidate such | specify that caches processing it are required to invalidate such | |||
responses. | responses. | |||
3. The Cache-Group-Invalidation Response Header Field | 3. The Cache-Group-Invalidation Response Header Field | |||
The Cache-Group-Invalidation response header field is a List of | The Cache-Group-Invalidation response header field is a List of | |||
Strings (Sections 3.1 and 3.3.1 of [STRUCTURED-FIELDS]). Each member | Strings (Sections 3.1 and 3.3.1 of [STRUCTURED-FIELDS]). Each member | |||
skipping to change at page 5, line 37 ¶ | skipping to change at line 198 ¶ | |||
The ordering of members is not significant. Unrecognised Parameters | The ordering of members is not significant. Unrecognised Parameters | |||
are to be ignored. | are to be ignored. | |||
Implementations MUST support at least 32 groups in a field value, | Implementations MUST support at least 32 groups in a field value, | |||
with up to at least 32 characters in each member. Note that generic | with up to at least 32 characters in each member. Note that generic | |||
limitations on HTTP field lengths may constrain the size of this | limitations on HTTP field lengths may constrain the size of this | |||
field value in practice. | field value in practice. | |||
4. IANA Considerations | 4. IANA Considerations | |||
IANA should perform the following tasks: | IANA has added the following entries to the "Hypertext Transfer | |||
Protocol (HTTP) Field Name Registry": | ||||
4.1. HTTP Field Names | ||||
Enter the following into the Hypertext Transfer Protocol (HTTP) Field | ||||
Name Registry: | ||||
* Field Name: Cache-Groups | ||||
* Status: permanent | ||||
* Reference: RFC nnnn | ||||
* Comments: | ||||
* Field Name: Cache-Group-Invalidation | ||||
* Status: permanent | ||||
* Reference: RFC nnnn | Field Name: Cache-Groups | |||
Status: permanent | ||||
Reference: RFC 9875 | ||||
* Comments: | Field Name: Cache-Group-Invalidation | |||
Status: permanent | ||||
Reference: RFC 9875 | ||||
5. Security Considerations | 5. Security Considerations | |||
This mechanism allows resources that share an origin to invalidate | This mechanism allows resources that share an origin to invalidate | |||
each other. Because of this, origins that represent multiple parties | each other. Because of this, origins that represent multiple parties | |||
(sometimes referred to as "shared hosting") might allow one party to | (sometimes referred to as "shared hosting") might allow one party to | |||
group its resources with those of others, or to send signals which | group its resources with those of others or to send signals that have | |||
have side effects upon them. | side effects upon them. | |||
Shared hosts that wish to mitigate these risks can control access to | Shared hosts that wish to mitigate these risks can control access to | |||
the header fields defined in this specification. | the header fields defined in this specification. | |||
6. References | 6. References | |||
6.1. Normative References | 6.1. Normative References | |||
[HTTP] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | [HTTP] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
Ed., "HTTP Semantics", STD 97, RFC 9110, | Ed., "HTTP Semantics", STD 97, RFC 9110, | |||
DOI 10.17487/RFC9110, June 2022, | DOI 10.17487/RFC9110, June 2022, | |||
<https://www.rfc-editor.org/rfc/rfc9110>. | <https://www.rfc-editor.org/info/rfc9110>. | |||
[HTTP-CACHING] | [HTTP-CACHING] | |||
Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
Ed., "HTTP Caching", STD 98, RFC 9111, | Ed., "HTTP Caching", STD 98, RFC 9111, | |||
DOI 10.17487/RFC9111, June 2022, | DOI 10.17487/RFC9111, June 2022, | |||
<https://www.rfc-editor.org/rfc/rfc9111>. | <https://www.rfc-editor.org/info/rfc9111>. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/rfc/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/rfc/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[STRUCTURED-FIELDS] | [STRUCTURED-FIELDS] | |||
Nottingham, M. and P. Kamp, "Structured Field Values for | Nottingham, M. and P. Kamp, "Structured Field Values for | |||
HTTP", RFC 9651, DOI 10.17487/RFC9651, September 2024, | HTTP", RFC 9651, DOI 10.17487/RFC9651, September 2024, | |||
<https://www.rfc-editor.org/rfc/rfc9651>. | <https://www.rfc-editor.org/info/rfc9651>. | |||
6.2. Informative References | 6.2. Informative References | |||
[TARGETED] Ludin, S., Nottingham, M., and Y. Wu, "Targeted HTTP Cache | [TARGETED] Ludin, S., Nottingham, M., and Y. Wu, "Targeted HTTP Cache | |||
Control", RFC 9213, DOI 10.17487/RFC9213, June 2022, | Control", RFC 9213, DOI 10.17487/RFC9213, June 2022, | |||
<https://www.rfc-editor.org/rfc/rfc9213>. | <https://www.rfc-editor.org/info/rfc9213>. | |||
Appendix A. Acknowledgements | Acknowledgements | |||
Thanks to Stephen Ludin for his review and suggestions. | Thanks to Stephen Ludin for his review and suggestions. | |||
Author's Address | Author's Address | |||
Mark Nottingham | Mark Nottingham | |||
Prahran | Prahran | |||
Australia | Australia | |||
Email: mnot@mnot.net | Email: mnot@mnot.net | |||
URI: https://www.mnot.net/ | URI: https://www.mnot.net/ | |||
End of changes. 22 change blocks. | ||||
85 lines changed or deleted | 55 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |