“Is this response cached?” sounds like a yes-or-no question. It hides several decisions. A browser keeping a stylesheet and a shared cache keeping a public page both save work, but the rules around those copies matter as much as the copies themselves.
A useful way to read a cache policy is as a promise about time: for some period, it is acceptable to reuse this response without asking for it again.
Freshness buys a quiet interval
Cache-Control: max-age=300
ETag: "revision-7"
Here, max-age sets a freshness lifetime of 300 seconds. A cache calculates the response's age; it does not simply start a new five-minute timer every time it receives an already cached copy. Once stale, a stored response normally needs validation unless reuse is otherwise allowed.
The second header gives the response a validator. A later request can send If-None-Match: "revision-7". If the representation is unchanged, a 304 Not Modified response lets the cache update its stored response without downloading the body again. These rules are defined in RFC 9111, section 4.
Two names that deserve care
no-cache allows storage but requires successful validation before reuse. no-store tells a cache not to store the request or response. private prevents storage by shared caches while allowing a private cache to store it, subject to the other rules. See the response directives for the precise definitions.
The names are compact; the consequences are different. When reviewing a configuration, it helps to write the desired behaviour in a sentence before choosing a directive. “Check with the server every time” and “do not keep a copy” describe different requirements.
Make the policy observable
For a small test, use a resource that is safe to request repeatedly. Record its response headers, request it again, and compare what the client and server report. Browser developer tools are useful here, provided you check whether their cache-disabling option is enabled.
Keep one question in view at a time. First establish whether a copy may be stored. Then examine freshness. Finally test validation. That order makes the result easier to explain—and much easier to revisit when a page appears to be serving yesterday's content.