Cabeçalhos de cache explicados: Cache-Control, Expires, ETag e como uma CDN os lê

Velocidade, Cache e CDN·· 2 visualizações· 4 min de leitura

A resposta curta: cada ficheiro que o servidor entrega leva umas linhas que o visitante não vê, os cabeçalhos. Alguns dizem a quem recebe o ficheiro se o pode guardar, durante quanto tempo e como confirmar depois se mudou. O navegador lê-os, e uma CDN também. Quase todas as surpresas com caches (o ficheiro antigo que não sai, a página pessoal entregue a outra pessoa, a CDN que não guarda nada) começam num destes cabeçalhos. Não vendemos CDN: o que aqui se explica vale para a CDN que escolher, numa conta sua, aberta directamente com esse fornecedor.

Os cabeçalhos que contam

Cabeçalho O que diz a quem guarda
Cache-Control: max-age Durante quantos segundos a cópia é considerada fresca. Enquanto o for, o navegador e a CDN usam-na sem perguntar nada ao servidor.
s-maxage O mesmo prazo, mas só para caches partilhadas (CDN e proxies). Quando existe, a CDN usa-o em vez do max-age. Permite à CDN guardar mais tempo do que o navegador, ou menos.
public e private public: qualquer cache pode guardar. private: só o navegador do próprio visitante; a CDN não deve guardar. É o que se usa em páginas pessoais.
no-cache Pode guardar, mas tem de perguntar ao servidor antes de cada uso. Ao contrário do que o nome sugere, não proíbe guardar.
no-store Não guardar em lado nenhum. Para conteúdo pessoal ou sensível.
Expires A forma antiga de dizer o prazo, com uma data e hora fixas. Se houver max-age, é o max-age que conta.
ETag e Last-Modified Uma impressão digital e a data da versão. Servem para a pergunta «mudou?»: quem tem a cópia envia If-None-Match ou If-Modified-Since, e se nada mudou o servidor responde 304 Not Modified sem voltar a enviar o ficheiro.
Vary Diz que a resposta muda conforme outro cabeçalho do pedido (por exemplo Accept-Encoding). A CDN guarda uma cópia por variante. Um Vary: Cookie ou Vary: User-Agent pode deixar a CDN quase sem acertos.
Age Posto pela cache: há quantos segundos aquela cópia está guardada. Se aparece, a resposta veio de uma cache e não do servidor.

Como ver e acertar os cabeçalhos do seu site

1 No navegador: F12, separador Network (Rede), recarregue a página, clique num ficheiro e leia os Response Headers.
2 Na linha de comandos: curl -sI https://www.asuaempresa.co.mz/ mostra só os cabeçalhos da página. Repita com o endereço de uma imagem ou de um CSS e compare.
3 Compare com o padrão saudável: ficheiros estáticos com versão no nome levam um prazo longo; as páginas HTML levam um prazo curto ou no-cache; as páginas com sessão levam private e no-store. Por exemplo:
# CSS, JS e imagens com versão no nome
Cache-Control: public, max-age=<prazo longo>, immutable
# páginas HTML públicas
Cache-Control: public, no-cache
# carrinho, conta, finalização de compra
Cache-Control: private, no-store
4 Para mudar o que o servidor envia: pelo .htaccess (veja cache do navegador com .htaccess) ou pelo plugin de cache, num WordPress (LiteSpeed Cache: as primeiras definições).
5 Veja o que a CDN faz com eles: muitas CDN deixam definir um prazo próprio para a cópia delas e outro para o navegador, por cima do que o servidor envia. Confirme no painel do fornecedor qual dos dois ganha.
6 Depois de mudar, purgue a CDN, senão ela continua a usar as cópias guardadas com as regras antigas: purgar a cache de uma CDN.
Não force a CDN a guardar tudo ignorando os cabeçalhos. Uma resposta que traz Set-Cookie ou private é pessoal. Se uma regra «guardar tudo» passar por cima disso, a CDN entrega essa resposta a quem vier a seguir: sessões trocadas, carrinhos de outra pessoa. Veja o que nunca pode ficar em cache.
Dois relógios, dois prazos. A cache da CDN pode ser purgada por si a qualquer momento; a do navegador dos visitantes não. Por isso compensa dar à CDN um prazo mais longo (s-maxage) e ao navegador um mais curto (max-age), salvo nos ficheiros com versão no nome.

Os cabeçalhos do seu site não dizem o que esperava? Envie-nos o endereço do ficheiro e o que o curl -sI mostra.

Abrir pedido de suporte

VEJA TAMBÉM

Cache do navegador com .htaccess

Os visitantes ainda veem o CSS ou o logótipo antigo: nomes versionados e “cache busting”

Origem e edge numa CDN: HIT, MISS, BYPASS e para que serve o origin shield

Purgar a cache de uma CDN: um ficheiro, uma pasta ou tudo, e quando não purgar

O que uma CDN faz por si: cache, compressão, imagens e protecção

Cabeçalhos de segurança explicados: o que fazem e como os acrescentar no .htaccess

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 321,75 MT/mês (plano de 3 anos, com cupão)

Ver planos
Esta resposta foi útil? A sua resposta ajuda-nos a melhorar este artigo.