
Cache HTTP e CDN com Cloudflare - Guia Completo
1. Introdução
Imagine duas situações: você entra em um site de e-commerce e a página abre em menos de 1 segundo. Ótima experiência, certo? Agora, pense no oposto: você clica em um link e espera 5, 6, 7 segundos para carregar. Provavelmente, você fecha a aba e vai embora.
A lentidão não é apenas um problema de experiência do usuário — ela também custa caro. Mais tempo de carregamento significa maior consumo de bandwidth, servidores sobrecarregados e perda de conversões. É aqui que entra o cache HTTP: a arte de armazenar conteúdos de forma inteligente para que não precisemos recriar ou buscar a mesma coisa repetidamente.
E quando falamos em cache distribuído pelo mundo, a Cloudflare se destaca como uma das maiores CDNs (Content Delivery Networks), trazendo não só velocidade, mas também economia e segurança para aplicações modernas.
2. Fundamentos do Cache HTTP
O que é cache?
Cache é como uma biblioteca. Se você pega um livro emprestado e outra pessoa também precisa dele, não faz sentido buscar na editora novamente — basta emprestar o mesmo exemplar.
Na web, o cache faz exatamente isso: guarda respostas para que possam ser reutilizadas.
Por que existe?
- Economia de recursos: menos requisições ao servidor de origem.
- Velocidade: resposta entregue diretamente do cache.
- Experiência do usuário: páginas rápidas aumentam retenção e conversão.
Onde acontece?
- Browser: armazena recursos estáticos (imagens, CSS, JS).
- Proxy: intermediários como proxies corporativos.
- CDN: distribuído em vários pontos do mundo.
- Servidor: cache interno (ex: Redis, Varnish).
Ciclo de vida do cache
Armazenamento → Validação → Expiração → Renovação
3. Headers HTTP de Cache (Explicação Prática)
Cache-Control
Define como e por quanto tempo um recurso pode ser cacheado.
Cache-Control: public, max-age=3600
max-age=3600
: válido por 1 hora.public
: qualquer cache pode armazenar.private
: apenas o browser do usuário.no-store
: nunca cachear.no-cache
: precisa validar antes de usar.
ETag
Um identificador único do conteúdo. Permite validação sem transferir tudo novamente.
ETag: "abc123"
Se o cliente já tiver esse ETag, o servidor pode responder com 304 Not Modified.
Last-Modified
Compara datas.
Last-Modified: Mon, 28 Aug 2023 10:00:00 GMT
Expires
Método legado que define a data de expiração absoluta.
Expires: Wed, 30 Aug 2023 10:00:00 GMT
Vary
Cache baseado em cabeçalhos específicos.
Vary: Accept-Encoding
Isso garante que versões gzip e brotli sejam diferenciadas.
4. Status de Cache na Prática
Quando usamos Cloudflare, os headers de resposta trazem CF-Cache-Status
. Os principais são:
Status Básicos
- HIT: recurso encontrado no cache.
- MISS: primeira visita ou recurso ainda não armazenado.
- BYPASS: cache ignorado (ex:
/api/
). - EXPIRED: recurso estava no cache mas passou do
max-age
.
Status Avançados
- STALE: conteúdo antigo servido enquanto busca a versão nova.
- UPDATING: Cloudflare está atualizando o cache em background.
- REVALIDATED: recurso validado via 304.
- DYNAMIC: conteúdo personalizado, não cacheável.
5. Cloudflare como Estudo de Caso
Rede Global
A Cloudflare possui mais de 300 data centers espalhados pelo mundo. Isso significa que o usuário recebe conteúdo do servidor mais próximo geograficamente.
Edge Caching
Diferente do origin server (sua aplicação principal), o cache fica nas bordas (edge) da rede da Cloudflare, próximo ao usuário.
Page Rules
Permite configurar regras de cache específicas por URL.
Cache API
Controle programático via Workers para decisões avançadas.
Tiered Cache
Hierarquia entre data centers para reduzir requisições ao servidor de origem.
Polish
Otimização automática de imagens, reduzindo bandwidth sem perda perceptível.
6. Configuração Prática na Cloudflare
Page Rules de exemplo
*.example.com/api/* → Bypass Cache
*.example.com/static/* → Cache Everything, Edge TTL: 1 month
*.example.com/images/* → Cache Everything, Browser TTL: 1 day
Workers para cache customizado
export default {
async fetch(request, env) {
let cacheUrl = new URL(request.url);
// Não cacheia APIs dinâmicas
if (cacheUrl.pathname.startsWith('/api/')) {
return fetch(request);
}
let cache = caches.default;
let response = await cache.match(request);
if (!response) {
response = await fetch(request);
response = new Response(response.body, response);
response.headers.append("Cache-Control", "max-age=3600");
event.waitUntil(cache.put(request, response.clone()));
}
return response;
}
};
Headers de resposta Cloudflare
CF-Cache-Status: HIT
CF-RAY: 7d4f2b8e9c1e2f3a-LAX
Fluxo visual simplificado
Usuário → CDN (Cloudflare) → Origin Server
1. Usuário faz requisição
2. Cloudflare verifica cache local
└── HIT: entrega direto do edge
└── MISS: busca no origin, armazena no edge
7. Debugging e Monitoramento
Interpretando headers
CF-Cache-Status
: mostra estado do cache.X-Cache
: usado em outras CDNs.
Ferramentas
- Chrome DevTools → aba Network.
- curl -I https://site.com → ver headers.
- Cloudflare Analytics → relatórios de cache hit ratio.
Métricas importantes
- Cache Hit Ratio: percentual de respostas servidas do cache.
- TTFB: tempo para primeiro byte.
- Bandwidth Savings: economia de tráfego.
Troubleshooting
- Recurso não está cacheando? Verifique
Cache-Control
. - Conteúdo stale aparecendo? Ajuste
stale-while-revalidate
.
8. Estratégias Avançadas
- Cache invalidation: purgar arquivos específicos ou todo o cache.
- Edge Side Includes (ESI): cache de fragmentos de página.
- Geo-location caching: entregar conteúdo por região.
- Mobile vs Desktop: cache diferenciado.
- A/B testing: usar
Vary
headers.
Fluxo com Geo-cache
Usuário (Brasil) → Edge São Paulo → HIT
Usuário (EUA) → Edge Nova Iorque → MISS → busca no origin
9. Casos de Uso Reais
E-commerce
- Produtos: páginas cacheadas.
- Imagens: armazenadas no edge.
- Preços: não cachear (dinâmico).
Blog/CMS
- Posts: cacheável.
- Assets: longa duração.
- Comentários: dinâmicos.
SaaS
- Dashboard: dinâmico.
- API: cache condicional.
- Assets estáticos: longo TTL.
API REST
- Cache por endpoint e parâmetros.
- Exemplo:
/api/products?limit=10
pode ser cacheado por 30s.
10. Melhores Práticas e Armadilhas
Do’s
- Versionamento de assets (
style.v2.css
). - Definir TTL apropriado.
Don’ts
- Não cachear conteúdo personalizado.
- Não armazenar recursos com credentials.
Armadilhas comuns
- Cachear APIs sensíveis.
- Problemas de mixed content.
Performance Tips
- Usar compressão (gzip, brotli).
- Minificar CSS/JS.
11. Futuro e Tendências
- HTTP/3 e QUIC: menor latência.
- Edge Computing: cache com lógica aplicada.
- AI/ML: predição de cache.
- WebAssembly: cache de código compilado no edge.
Conclusão
O cache HTTP, quando aliado a uma CDN como a Cloudflare, é um dos pilares da performance web moderna. Saber configurar corretamente não apenas melhora a velocidade, mas também reduz custos e aumenta conversões.
Dica Final: sempre meça, monitore e ajuste sua estratégia de cache. O que funciona para um blog pode não servir para uma API.