O que é invalidação de cache?
A invalidação de cache remove entradas armazenadas em cache ou as marca como expiradas antes do vencimento normal. Requisições posteriores acionam uma nova busca ou uma revalidação com a origem, e uma entrada que foi apenas marcada como expirada ainda pode ser servida nesse intervalo, dependendo da política de cache.
Como funciona a invalidação de cache
A invalidação altera o estado do cache sem exigir que os responsáveis pela publicação esperem os prazos de validade terminarem. O próprio HTTP oferece poucos recursos para isso: um cache invalida uma URL quando uma requisição bem-sucedida com método não seguro, como PUT, POST ou DELETE, direcionada a essa URL passa por ele, o que afeta apenas os caches no caminho dessa requisição, e nenhuma diretiva Cache-Control pode limpar uma resposta já armazenada. Por isso, as CDNs expõem seu próprio plano de controle, que pode selecionar URLs exatas, prefixos, tags ou uma distribuição inteira; depois disso, os nós afetados removem o objeto ou exigem revalidação. Um expurgo rígido remove o objeto, de modo que a próxima requisição encontra uma ausência de resultado no cache, e o objeto é buscado por completo e armazenado em cache novamente. Um expurgo suave mantém o objeto e o marca como expirado, de modo que a próxima requisição o revalida e pode reutilizar o corpo armazenado quando a origem responde com 304 Not Modified. Os nomes variam entre provedores: a Cloudflare chama a operação suave de invalidação e a rígida de expurgo, enquanto o que Amazon CloudFront e Google Cloud CDN chamam de invalidação remove o objeto.
Informações essenciais
- Expurgar a URL original também remove suas variantes redimensionadas ou em outros formatos? Apenas se o provedor as tratar como um único objeto ou se você as selecionar em conjunto, então comece identificando como as URLs das variantes diferem da original. Nos serviços Fastly CDN, o Image Optimizer expurga o original e todas as variantes quando a requisição de expurgo não contém parâmetros de transformação; nos serviços Fastly Compute, o mesmo conjunto é expurgado pela Purge API por meio de uma chave substituta compartilhada. A Cloudflare expurga todas as variantes armazenadas em cache de uma URL de imagem que usa seu recurso Vary for Images. Já o Amazon CloudFront exige a string de consulta no caminho de invalidação quando a distribuição encaminha strings de consulta à origem, ou um curinga
*no final para abranger todas as strings de consulta. Um expurgo que especifica uma URL não alcança variantes publicadas em outros caminhos, e a inclusão de outros nomes de host depende do provedor: uma invalidação de caminho no Google Cloud CDN se aplica a todos os nomes de host no balanceador de carga, a menos que um host seja especificado. Variantes fora da seleção precisam de uma tag de cache ou chave substituta compartilhada, de um expurgo por prefixo ou de uma lista explícita. - Em que ordem devo fazer isso e como saber se funcionou? Primeiro, corrija o conteúdo na origem: tanto a Cloudflare quanto o Google Cloud CDN alertam que, caso contrário, a próxima requisição pode armazenar a versão antiga em cache novamente. Uma resposta de sucesso da API não comprova a remoção. A Cloudflare documenta que o HTTP 200 de uma requisição de expurgo confirma o recebimento, não que havia algo armazenado em cache ou que algo foi removido, e orienta solicitar o recurso e confirmar que
CF-Cache-Statusjá não éHIT. Esse cabeçalho é um indício, não uma prova: a primeira requisição após um expurgo informaMISS, e as seguintes informamHITpara a cópia reposta no cache, enquantoSTALEouUPDATINGsignifica que uma cópia armazenada e expirada foi servida. Solicite o original e cada variante afetada com um cliente sem cache local e confirme que o conteúdo retornado é a versão substituta. Cada resposta descreve um cache: o Google Cloud CDN observa que uma invalidação pode ser informada como concluída enquanto um pequeno número de caches ainda não a processou, uma situação rara que se resolve por conta própria. No CloudFront, uma invalidação enviada não pode ser cancelada, então confira os caminhos antes de enviá-la. - Um expurgo na CDN atualiza o que os navegadores armazenam? Não. O Google Cloud CDN afirma que as invalidações não afetam cópias nos caches dos navegadores nem em caches operados por provedores de internet de terceiros, e o guia do CloudFront diz que um usuário pode continuar vendo a versão antiga até que ela expire nesses caches. Para deixar de depender dessas cópias mais cedo, publique o arquivo corrigido com um novo nome ou caminho e atualize as páginas que fazem referência a ele. Esse é um dos motivos pelos quais o CloudFront recomenda nomes de arquivo versionados em vez de invalidação para arquivos atualizados com frequência. As cópias armazenadas na URL antiga não são removidas: as páginas que fazem referência à nova URL simplesmente deixam de solicitá-las. Alterar apenas a string de consulta é menos eficaz, pois isso só funciona quando todos os caches no caminho incluem a string de consulta na chave de cache; no nível de cache Ignore Query String da Cloudflare, por exemplo, URLs que diferem apenas na string de consulta compartilham um único objeto em cache. Uma URL que precisa permanecer igual e pode exigir correções no mesmo endereço não deve ter um prazo longo de validade no navegador.
- Expurgo rígido ou suave, e qual deve ser o alcance? Após um expurgo rígido de tudo, as requisições são atendidas pela origem até que o cache seja preenchido novamente; a Cloudflare alerta que, em sites de alto tráfego com muitos recursos, isso pode causar um grande pico de requisições à origem, deixar o site lento e sobrecarregar a origem, e o Google recomenda invalidar apenas o necessário. Um expurgo suave permite que a próxima requisição revalide e reutilize o corpo armazenado, o que só funciona se a origem enviar
ETagouLast-Modifiede responder a requisições condicionais; a Cloudflare sugere essa opção para atualizar conteúdo que talvez não tenha mudado, como um grupo de recursos que compartilham uma tag de cache. A contrapartida é que conteúdo marcado como expirado ainda pode chegar aos usuários: a Fastly descreve um objeto submetido a expurgo suave como servido mesmo expirado enquanto o atualizado é buscado, e a Cloudflare pode servir conteúdo invalidado e expirado quando a origem retorna um erro 5xx ou está inacessível. Use um expurgo rígido quando o conteúdo antigo não puder ser servido novamente em nenhuma circunstância. O agrupamento de requisições e uma camada de proteção da origem reduzem a quantidade de requisições de reposição que chegam à origem.
Quando a invalidação de cache é relevante
Invalide um recurso quando uma correção urgente precisar se propagar antes que seu tempo de vida expire. Uma invalidação em uma CDN não alcança cópias já armazenadas por navegadores ou outros caches posteriores no caminho de entrega, por isso é melhor publicar conteúdo que muda rotineiramente com nomes de arquivo versionados. Expurgue o menor conjunto que abranja a alteração, pois tudo o que um expurgo amplo remove precisa ser reposto a partir da origem à medida que as requisições chegam.
Como a Transloadit ajuda com a invalidação de cache
O Smart CDN da Transloadit armazena cada resultado transformado em cache na respectiva URL tlcdn.com. A documentação descreve controles que limitam antecipadamente por quanto tempo um resultado é reutilizado: o parâmetro cache_duration do Robot /file/serve define, para o navegador e os caches compartilhados, os prazos de validade enviados com o resultado e, para URLs assinadas, o prazo efetivo de validade do cache é limitado pelo tempo restante de validade da assinatura.
As páginas vinculadas aqui não descrevem uma operação de expurgo ou invalidação para o Smart CDN, nem o que acontece com um resultado em cache quando o original é substituído sem alterar o caminho do arquivo. Uma URL do Smart CDN especifica um arquivo de origem e os parâmetros de transformação que seu Template lê, portanto um caminho de arquivo diferente ou um valor diferente para um desses parâmetros solicita uma versão derivada diferente. As páginas não afirmam que um parâmetro extra sem relação com esses parâmetros permite contornar um resultado em cache; teste o caso em que o caminho permanece igual no seu próprio Workspace antes de depender desse comportamento.
Fontes
- RFC 9111, seção 4.4: invalidação de respostas armazenadas
- MDN: cache HTTP (exclusão de respostas armazenadas e caches gerenciados)
- Amazon CloudFront: invalidar arquivos para remover conteúdo
- Amazon CloudFront: o que você precisa saber ao invalidar caminhos
- Cloudflare: expurgar o cache (métodos e verificação)
- Cloudflare: invalidar conteúdo em cache (expurgo versus invalidação)
- Cloudflare: respostas do cache (valores de CF-Cache-Status)
- Cloudflare: chaves de cache (strings de consulta e a chave de cache)
- Fastly: primeiros passos com o expurgo (expurgos suaves e rígidos, chaves substitutas)
- Referência do Fastly Image Optimizer: expurgo de imagens e suas variantes
- Google Cloud CDN: visão geral da invalidação de cache