Start here. This is the direct spoken answer to practice first.
Why this question matters
Caching an entire response can save substantial application work, but the owner of the cache and its policy changes the correctness model. Confusing browser, proxy, middleware, and server output caches can leak data or produce stale behavior no layer understands.
HTTP response caching is driven by headers such as Cache-Control, validators, and Vary, so browsers and shared proxies can reuse responses according to standard semantics. ASP.NET Core output caching is a server policy that stores generated output even when client request headers would make response-caching middleware impractical. I use it for expensive, repeatable endpoints where the cache key can represent every input that changes the response. A CDN is useful when public content should be served near users and the edge can own the variation and purge rules.