Cache em camadas: do navegador à aplicação
Quando alguém abre uma página, a resposta pode vir de vários lugares antes de chegar ao código da aplicação. Cada um deles é uma camada de cache, e todas obedecem, em maior ou menor grau, ao cabeçalho Cache-Control.
As quatro camadas
Navegador: guarda a cópia no disco do próprio leitor. É a mais rápida e a mais difícil de limpar, porque você não controla a máquina dele.
CDN, como a Cloudflare: guarda cópias em servidores espalhados pelo mundo, perto do leitor.
Proxy reverso, como o Nginx: protege a aplicação de picos e continua respondendo se ela cair por alguns segundos.
Aplicação: o cache do próprio framework, como o ISR do Next.js.
Um cabeçalho, dois públicos
O Cache-Control separa o navegador dos caches compartilhados:
Cache-Control: public, max-age=0, must-revalidate, s-maxage=31536000
max-age=0, must-revalidate: o navegador sempre confere se a cópia ainda vale. Com ETag, a resposta é um 304 de poucos bytes.s-maxage: vale só para CDN e proxy, que podem guardar a cópia por muito mais tempo.
O que nunca deve ser cacheado
Páginas de usuário logado precisam de private, no-store. Um cache compartilhado que guarde o painel de uma pessoa pode servir essa tela para outra. É o tipo de falha que não gera erro nenhum, só um vazamento silencioso.

