CDN explicada: o que faz uma rede de distribuição de conteúdo | We.Inc
Como uma CDN copia seus arquivos para servidores de borda perto dos visitantes, o que significam cache hit e cache miss e quais headers Cache-Control decidem o que a borda pode guardar.
Uma rede de distribuição de conteúdo é um conjunto de servidores espalhados pelo mundo que guardam cópias dos arquivos do seu site. Os visitantes são atendidos por um servidor de borda próximo em vez da sua origem, então as páginas carregam com menos espera e o seu próprio servidor recebe muito menos requisições. Os headers Cache-Control decidem o que a borda pode armazenar.
Termos de CDN em uma linha cada
Termo
Significado
Origem
Seu próprio servidor ou armazenamento, onde ficam os arquivos reais
Borda
Um servidor da CDN perto do visitante que responde em nome da origem
Cache hit
A borda já tinha uma cópia atual e respondeu sem consultar a origem
Cache miss
A borda não tinha nada utilizável, buscou na origem e talvez tenha guardado
Purge
Pedir à CDN para descartar as cópias guardadas para que a próxima requisição busque versões novas
Na internet, distância custa tempo: cada nova conexão precisa de várias idas e voltas antes de o primeiro byte chegar. Uma CDN encurta essas viagens respondendo de algum lugar perto de quem lê. Este guia explica como isso funciona, o que ela não consegue fazer e como seus headers a controlam, com um simulador para você testar.
Escolha diretivas Cache-Control no simulador para ver se um navegador e uma borda da CDN podem guardar a resposta, e por quanto tempo.
Copie a linha de header resultante para a configuração do seu servidor ou hospedagem.
Leia a tabela de referência para escolher valores sensatos para HTML, assets com hash e páginas privadas.
Depois de um deploy, faça purge na CDN ou use novos nomes de arquivo para que os visitantes recebam a atualização.
Coloque um hash de conteúdo nos nomes de arquivo, como app.3f9a1c.js, e faça cache deles por um ano com immutable. Um novo build gera novos nomes, então nada desatualizado é servido.
Mantenha o HTML com um tempo de vida compartilhado curto ou revalide-o, porque a URL dele nunca muda entre versões.
Nunca deixe uma CDN guardar páginas que mostram dados da conta de uma pessoa. Marque-as como private ou no-store.
Carregar uma biblioteca de uma CDN pública não evita mais um novo download: hoje os navegadores separam o cache por site, por privacidade.
Perguntas frequentes
Uma CDN deixa qualquer site mais rápido?
Normalmente sim, para visitantes longe do seu servidor, porque as idas e voltas são mais curtas e as conexões são abertas perto deles. Ela pode adicionar custo quando introduz um domínio extra para consultar e conectar, e é por isso que servir tudo pelo seu próprio domínio através da CDN é melhor do que misturar hosts.
O que é s-maxage?
Uma diretiva Cache-Control que define o tempo de validade apenas para caches compartilhados, como CDNs. Ela substitui max-age na borda enquanto os navegadores continuam usando max-age, então você pode deixar a borda guardar uma página por uma hora e o navegador por um minuto.
Uma CDN consegue fazer cache de páginas dinâmicas?
Sim, se a resposta for a mesma para todos. Até alguns segundos de cache podem absorver um pico de tráfego. Respostas que variam por usuário logado não devem ser guardadas em um cache compartilhado.
Uma CDN é um risco de segurança?
Ela é mais uma parte no caminho do seu conteúdo. Se você carrega scripts de uma CDN de terceiros, adicione um hash de Subresource Integrity para que o navegador recuse um arquivo que tenha sido alterado.
Preciso adicionar uma CDN por conta própria?
Muitas plataformas de hospedagem já servem os sites publicados por uma CDN. Leia a documentação da sua hospedagem antes de colocar uma segunda por cima, já que duas camadas de cache tornam purges e depuração mais difíceis.
O que acontece em uma requisição
O resolver do visitante retorna o endereço de uma borda próxima. A borda procura a URL no que tem guardado. Em um hit, responde na hora; em um miss, pergunta à sua origem, repassa a resposta e guarda uma cópia se os headers permitirem.
As bordas também mantêm conexões abertas e prontas com a origem, então até um miss costuma ser mais rápido do que um visitante se conectando ao seu servidor do outro lado do mundo.
O que uma CDN não resolve
Consultas lentas ao banco de dados, JavaScript pesado e imagens grandes demais continuam lentos quando servidos de uma borda. Uma CDN elimina distância, não trabalho.
Ela também adiciona mais uma coisa que pode falhar. Se a CDN tiver uma pane, todos os sites atrás dela são afetados, então vale ter páginas de status e um plano para esse caso.
Diretivas Cache-Control que importam na borda
O que cada diretiva diz aos navegadores e às CDNs
Diretiva
Navegador
Borda da CDN
max-age=N
Válido por N segundos
Válido por N segundos, a menos que s-maxage esteja definido
s-maxage=N
Ignorado
Válido por N segundos, substituindo max-age
Pode guardar
Pode guardar, mesmo com um header Authorization
Pode guardar
Não pode guardar
Não pode guardar
Não pode guardar
Pula a revalidação enquanto válido
Pula a revalidação enquanto válido
stale-while-revalidate=N
Pode servir conteúdo desatualizado por N segundos enquanto atualiza
O mesmo, se a CDN suportar
Receitas de header por tipo de arquivo
Três políticas comuns
Assets com hash duram um ano, o HTML é atualizado na borda a cada minuto e as páginas de conta nunca passam por um cache compartilhado.
Simulador de Cache-Control
Escolha as diretivas e veja quem pode guardar a resposta.
max-age (segundos)
s-maxage (segundos, em branco para nenhum)
Compartilhamento
Public, private ou no-store
Adicionar immutable
Navegador
Borda da CDN
Pode guardar, válido por {n} segundos
Não pode guardar
Pode guardar, mas precisa consultar o servidor antes de reutilizar