O cache HTTP permite que navegadores e CDNs reutilizem uma resposta em vez de buscá-la de novo, controlado pelo header Cache-Control. O padrão vencedor para web apps: coloque um hash nos nomes de arquivo dos assets e faça cache deles para sempre; mantenha o HTML sem cache.
A estratégia de dois níveis
http
# Assets versionados com hash — o conteúdo nunca muda para uma dada URL
Cache-Control: public, max-age=31536000, immutable
# ex. /static/app.9f2c1a.js (o hash muda quando o conteúdo muda)
# HTML — deve estar sempre fresco para poder apontar para os novos hashes de assets
Cache-Control: no-cache
