Objetivos de aprendizado
Depois de ler este artigo, você vai conseguir:
- Entender o que é uma CDN e como ela encontra o servidor mais próximo
- Saber o que a CDN guarda em cache e como os cabeçalhos HTTP controlam isso
- Verificar com curl se uma resposta veio do cache e reconhecer quando a CDN não ajuda
Se o seu servidor está em Nova York e o visitante em Tóquio, cada requisição atravessa o planeta duas vezes: na ida e na volta. A luz na fibra tem velocidade finita, então a distância vira tempo de espera. Uma página com 40 arquivos sofre esse atraso várias vezes.
A CDN ataca esse problema colocando cópias do conteúdo perto de quem acessa. O resultado é um site mais rápido, um servidor menos pressionado e menos estrago quando o tráfego dispara de repente.
O que é uma CDN?#
CDN significa Content Delivery Network, ou rede de distribuição de conteúdo. Segundo a definição da MDN, é um grupo de servidores espalhados por muitos locais, que guardam cópias dos dados para que cada requisição seja atendida pelo servidor mais próximo do usuário.
Três termos aparecem sempre:
- Origem: o seu servidor, onde o conteúdo original vive.
- Ponto de presença (PoP): um local físico da CDN, num datacenter, com vários servidores.
- Edge (borda): o conjunto dos servidores da CDN que ficam mais perto do visitante.
A CDN funciona como um intermediário: o visitante fala com ela, e ela só fala com a origem quando precisa.
Como uma CDN funciona?#
O caminho de uma requisição tem quatro passos:
- O visitante pede
https://www.exemplo.com/logo.png. O DNS devolve um endereço da CDN, não o da sua origem. - A requisição chega ao PoP mais próximo. Muitas CDNs usam anycast: o mesmo endereço IP é anunciado a partir de vários PoPs, e a própria rede de roteamento da internet leva o visitante ao mais perto.
- Se o PoP já tem uma cópia válida do arquivo, responde na hora. Isso é um cache hit.
- Se não tem, busca na origem, responde ao visitante e guarda a cópia para os próximos. Isso é um cache miss.
Só o primeiro visitante de cada PoP paga o custo de ir até a origem, até a cópia vencer. Os seguintes recebem a cópia guardada. Por isso o servidor de origem recebe uma fração das requisições, mesmo quando o site tem muito acesso.
O que uma CDN guarda em cache?#
O que mais compensa cachear é conteúdo igual para todos os visitantes:
- Arquivos estáticos: CSS, JavaScript, fontes, imagens, vídeos e downloads.
- Páginas estáticas: sites gerados (HTML pronto) podem ser servidos inteiros pela CDN.
- Respostas públicas de API: uma lista de produtos que é a mesma para todo mundo pode ficar em cache por alguns segundos.
O que não deve ser cacheado: respostas personalizadas, como o painel de um usuário autenticado ou um carrinho de compras. Se uma resposta dessas fosse guardada num cache compartilhado, outro visitante poderia recebê-la.
Como a CDN sabe por quanto tempo guardar?#
Quem manda é a sua origem, pelo cabeçalho Cache-Control da resposta. Os valores que mais importam para uma CDN:
| Diretiva | O que faz |
|---|---|
max-age=3600 |
A resposta é fresca por 3600 segundos, em qualquer cache |
s-maxage=3600 |
Igual, mas vale só para caches compartilhados (como a CDN) e tem prioridade sobre max-age neles |
public |
Permite guardar mesmo em requisições com Authorization |
private |
Só o navegador pode guardar; a CDN não |
no-store |
Ninguém guarda |
immutable |
O conteúdo nunca muda; não revalide |
stale-while-revalidate=300 |
Pode servir a cópia vencida por até 300 s enquanto busca a nova em segundo plano |
Exemplo prático: arquivos com hash no nome mudam de URL quando mudam de conteúdo, então podem ficar guardados por um ano. Já o HTML precisa de cache curto no navegador, mas pode ficar mais tempo na CDN:
Para /assets/app.3f9a1c.js:
Cache-Control: public, max-age=31536000, immutablePara /index.html:
Cache-Control: public, max-age=0, s-maxage=300, stale-while-revalidate=60Os detalhes de cada diretiva estão em o que é Cache-Control. A semântica de cache compartilhado é definida na RFC 9111, e stale-while-revalidate na RFC 5861.
Como saber se a resposta veio do cache?#
Peça só os cabeçalhos com curl e repita o comando duas vezes:
curl -sI https://www.exemplo.com/assets/app.3f9a1c.jsProcure o cabeçalho Age, que diz há quantos segundos a cópia está guardada. Se ele aparece com um valor maior que zero, a resposta veio de um cache intermediário. Age: 0 ou a ausência dele não prova que veio da origem. Muitas CDNs também enviam um cabeçalho próprio indicando HIT ou MISS, mas o nome varia de um provedor para outro (consulte a documentação do seu). Na primeira chamada costuma ser MISS; na segunda, HIT.
Quando a CDN não ajuda?#
- Conteúdo personalizado ou em tempo real: sem cache, toda requisição vai até a origem. A CDN ainda pode reduzir o tempo de handshake TLS, mas a distância até a origem continua.
- Público concentrado perto da origem: se todos os visitantes estão na mesma cidade do servidor, quase não há latência para economizar.
- Cache mal configurado: sem
Cache-Controlclaro, cada CDN aplica as próprias regras padrão, e você pode servir um arquivo velho ou nunca aproveitar o cache. - Dependência de terceiros: se você carrega bibliotecas de uma CDN pública e ela cai ou é bloqueada, seu site quebra. Se ela for comprometida, pode entregar código malicioso. Use Subresource Integrity (o atributo
integrity, comcrossorigin="anonymous", no<script>) para o navegador recusar um arquivo alterado.
CDN, load balancer e proxy reverso: qual a diferença?#
Os três ficam entre o visitante e a aplicação, e por isso se confundem. O load balancer reparte requisições entre vários servidores seus. A CDN guarda cópias em vários lugares do mundo. Na prática, uma CDN é um proxy reverso distribuído com cache, e muitas incluem também balanceamento, WAF e proteção contra DDoS.
Como fazer isso na Square Cloud#
Todo plano da Square Cloud inclui CDN global, tráfego ilimitado (sem cobrança por banda ou por requisição, sujeito à política de uso justo), TLS automático, WAF e proteção DDoS L3/L4/L7. Sua aplicação web recebe um subdomínio *.squareweb.app com HTTPS e, a partir do plano Standard, você pode usar um domínio personalizado.
A rede é uma CDN Anycast com mais de 200 pontos de presença, HTTP/3 e WebSockets. Ela faz cache respeitando o Cache-Control da sua aplicação, e há purge de cache tanto no subdomínio squareweb.app quanto no domínio próprio. Para usar o domínio próprio, você cria no seu registrador os registros DNS que o painel mostra.
Veja os detalhes da rede em Rede e CDN da Square Cloud.
Rede
Domínio próprio, TLS automático e CDN global para o seu app
Perguntas frequentes
CDN e hospedagem são a mesma coisa?
Não. A hospedagem roda a sua aplicação e guarda os dados originais (a origem). A CDN fica na frente da origem e guarda cópias das respostas em vários lugares. Muitas hospedagens já incluem uma CDN, mas as funções são diferentes.
CDN serve para API e conteúdo dinâmico?
Serve em parte. Respostas que mudam por usuário não devem ser cacheadas, mas a CDN ainda pode encerrar o TLS perto do visitante, reaproveitar conexões com a origem e filtrar ataques. Respostas públicas e iguais para todos podem ser cacheadas por poucos segundos.
Como limpar o cache da CDN depois de atualizar um arquivo?
Há duas formas: pedir uma limpeza (purge) na CDN ou trocar a URL do arquivo, por exemplo com um hash no nome (app.3f9a1c.js). A segunda é mais confiável, porque não depende de a limpeza chegar a todos os servidores.
Uma CDN deixa o site mais seguro?
Ajuda em alguns pontos: absorve picos de tráfego, esconde o endereço da origem e costuma incluir WAF e mitigação de DDoS. Mas não corrige falhas do seu código, e um arquivo servido por CDN de terceiros pode ser um risco se a CDN for comprometida.
Mais em Rede e domínios
Ver todos os 27 artigos- O que é load balancer (balanceamento de carga)Load balancer é o componente que distribui requisições entre vários servidores. Veja como funciona, os algoritmos, as camadas 4 e 7 e um exemplo com nginx.
- Registros DNS: A, CNAME, MX e TXT explicadosRegistros DNS são as instruções de uma zona que dizem para onde um nome aponta. Entenda A, AAAA, CNAME, MX, TXT, NS e CAA com exemplos e comandos dig.
- Como apontar um domínio para sua hospedagemPara apontar um domínio para sua hospedagem, crie um registro CNAME (ou A) no DNS do seu registrador. Veja o passo a passo, como testar e os erros comuns.
- Cabeçalho Cache-Control: quanto tempo o navegador e a CDN guardam um arquivoCache-Control é o cabeçalho HTTP que define quanto tempo navegador e CDN guardam uma resposta. Veja max-age, no-cache, immutable e receitas por tipo de arquivo.