Summary

  • RFC 9875 gives one cache an exact, opaque way to associate stored responses from the same origin and to consider invalidating related members.
  • The action is optional, does not cascade and does not synchronize other caches; receipt, local action, refill and user-visible convergence need separate evidence.

A state change can make more than one cached resource obsolete. A price update might affect a product page, a search result and a summary endpoint even though each has a different URI and cache key. Before RFC 9875, implementations often inferred that relationship from URL shape or relied on private purge systems. RFC 9875 supplies a standard HTTP vocabulary for expressing the relationship.

The first field is Cache-Groups. It is a Structured Fields List of Strings. Each string is opaque: a cache compares it but does not interpret its business meaning. Order carries no significance, unknown parameters are ignored, and implementations must support at least 32 group members in one field with at least 32 characters per member, subject to ordinary HTTP field-size constraints.

Membership is narrower than the label suggests. Two stored responses share a group only when they sit in the same cache, carry an exactly equal case-sensitive string and belong to the same URI origin. A string called catalogue in another origin is not the same operational group. Nor does the matching word in a second cache create shared state between the two devices.

The second field is Cache-Group-Invalidation. A response to an unsafe request such as POST can list group strings whose members the receiving cache may invalidate. The same field on a response to a safe request such as GET must be ignored. This method boundary stops an ordinary retrieval response from quietly acquiring the same invalidation role.

The decisive word is MAY. RFC 9875 lets a cache invalidate members related to a response it is invalidating, and lets a cache act on group names in an unsafe-request response. It does not require every cache to do so. A separate extension, such as targeted cache control, can strengthen the instruction for a defined class of caches. That is an added policy contract, not a property that can be inferred from the group name itself.

Even a local invalidation is not necessarily a deletion receipt. RFC 9111 defines invalidation as either removing matching stored responses or marking them invalid so that they require validation before reuse. The next request might therefore trigger revalidation, obtain a replacement representation or fail. The word “invalidated” does not reveal which storage consequence occurred.

The mechanism also refuses a tempting fiction: group invalidation does not cascade. If response A shares one group with B and B shares another group with C, invalidating A through the first group does not automatically traverse B and invalidate C. The actual membership set at the cache, at the moment the event is processed, determines the local candidate set.

Most importantly, the RFC states that these mechanisms operate within a single cache for stored responses associated with one origin. They do not synchronize multiple caches in a hierarchy or mesh. If an origin response crosses one path, caches on another path may never receive it. A cache that receives it may not implement the fields, may strip them, may exercise the optional rule differently or may hold a different member set.

That yields an evidence chain rather than a universal purge flag. Record the origin state change; who was authorized to emit the fields; the request method and response; which intermediary received it; whether it understood RFC 9875; the policy or targeted extension in force; the members it held; its local invalidation decision; removal or invalid marking; the later validation or refill; and an application canary on each material delivery path.

The authority question is real on shared origins. RFC 9875 warns that one party might group its resources with another party's or send invalidation signals that affect them. A platform that allows tenants to inject these headers without origin-scoped controls has converted a convenient relationship into a cross-tenant control surface.

IANA's HTTP field registry records both names as permanent List fields. That establishes common spelling and a specification reference. It does not establish support, preservation, action, coverage or outcome in any current cache.

Sources