O que é cache de conteúdo?

O cache de conteúdo armazena cópias reutilizáveis de respostas, metadados ou recursos gerados perto de quem os consumirá depois. Requisições subsequentes podem evitar a repetição de cálculos ou da obtenção de dados da origem.

Como funciona o cache de conteúdo

Um cache HTTP armazena uma resposta sob uma chave de cache. A chave inclui, no mínimo, o método e a URL da requisição, e pode ser ampliada por cabeçalhos de requisição que a resposta especifica em Vary ou pela configuração da CDN. Enquanto uma resposta armazenada está dentro do prazo de validade, o cache pode usá-la para responder sem contatar a origem. Depois que ela fica desatualizada, o cache normalmente consulta a origem antes de usá-la novamente, a menos que uma diretiva ou a configuração do cache permita servir a cópia desatualizada. Quando a origem enviou um validador (ETag ou Last-Modified), essa consulta é uma requisição condicional, e uma resposta 304 Not Modified permite que o cache continue usando a cópia sem baixar o corpo novamente. Dois tipos de cache seguem regras diferentes. Um cache privado, normalmente o do navegador, pertence a um usuário e pode conter respostas personalizadas. Um cache compartilhado fica entre os clientes e a origem e atende a muitos usuários; CDNs e proxies reversos são caches compartilhados administrados pelo operador do site, que a MDN chama de caches gerenciados. Cache-Control define um prazo de validade explícito com max-age e pode tratar os dois tipos separadamente: private instrui os caches compartilhados a não armazenar uma resposta, e s-maxage substitui max-age apenas para caches compartilhados. Um cache gerenciado acrescenta sua própria configuração e operações de limpeza. Uma limpeza remove a cópia na CDN, mas as cópias já armazenadas pelos navegadores permanecem até expirar. Por isso, recursos que nunca mudam são publicados em URLs versionadas com prazos de validade longos, enquanto URLs que precisam permanecer estáveis são revalidadas.

Informações essenciais

  1. no-cache ou no-store? no-store instrui todos os caches, privados ou compartilhados, a não guardar a resposta. no-cache permite armazenar a resposta, mas proíbe reutilizá-la sem antes revalidá-la com a origem. Quando a resposta contém um validador como ETag ou Last-Modified e a origem responde a requisições condicionais, um recurso inalterado custa uma pequena troca com resposta 304 Not Modified em vez de um download completo; sem essas condições, a reutilização normalmente significa baixar a resposta completa novamente. Nenhuma das diretivas garante privacidade por si só: no-cache ainda permite o armazenamento, e a RFC 9111 afirma que no-store não é um mecanismo confiável ou suficiente para garantir privacidade. Uma CDN também pode tratar no-cache de forma diferente da RFC. A Cloudflare documenta que, com seu recurso Origin Cache Control desabilitado, não armazena uma resposta no-cache em cache de forma alguma e, com o recurso habilitado, armazena a resposta em cache e sempre a revalida.
  2. Uma resposta sem Cache-Control fica fora do cache? Não de forma confiável. Quando nenhum tempo de vida explícito é informado, a RFC 9111 permite que um cache estime esse tempo, normalmente como uma fração do tempo decorrido desde Last-Modified (o exemplo da RFC é 10%), e recomenda que os servidores de origem enviem diretivas explícitas caso queiram impedir o armazenamento em cache. As CDNs acrescentam seus próprios padrões. A Cloudflare decide pela extensão do arquivo, não pelo tipo MIME: ela armazena em cache uma resposta 200 para uma extensão da sua lista padrão, como JPG, PNG, CSS ou JS, por um período padrão, mesmo quando a resposta não contém Cache-Control nem Expires, e não armazena HTML ou JSON em cache a menos que uma regra habilite esse comportamento. Esse padrão segue a extensão da URL, e uma regra de cache pode estendê-lo a todo o conteúdo, então não dependa dele para manter páginas personalizadas fora do cache. Envie uma política explícita em cada resposta e leia sobre o comportamento padrão da CDN antes de depender de qualquer um dos dois.
  3. Como manter respostas personalizadas fora de um cache compartilhado? Envie Cache-Control: private, que instrui caches compartilhados, como CDNs, a não armazenar a resposta, mas ainda permite que o navegador do usuário a armazene; para páginas personalizadas após o login, a MDN recomenda Cache-Control: no-cache, private, para que o navegador também revalide a resposta antes de reutilizá-la. O HTTP protege apenas um caso automaticamente: um cache compartilhado não pode reutilizar uma resposta a uma requisição que continha Authorization, a menos que a resposta permita explicitamente essa reutilização com public, s-maxage ou must-revalidate. Uma resposta personalizada por meio de um cookie não recebe essa proteção, e a MDN observa que um cookie por si só não torna uma resposta privada. Uma CDN respeita a diretiva apenas enquanto segue os cabeçalhos da origem: a Cloudflare, por exemplo, documenta que respeita os cabeçalhos de cache da origem, a menos que uma regra de cache Edge Cache TTL os substitua, então confira as regras da CDN que correspondem às URLs personalizadas. private controla apenas onde uma resposta pode ser armazenada; a RFC 9111 afirma que essa diretiva não pode garantir a privacidade do conteúdo.
  4. O que precisa estar na chave de cache para variantes de mídia? Cada entrada que altera a saída, e nada mais. Quando a variante depende de um cabeçalho da requisição, por exemplo, um formato de imagem negociado por meio de Accept, a resposta deve listar esse cabeçalho em Vary; segundo a RFC 9111, um cache só pode reutilizar uma resposta armazenada para requisições cujos cabeçalhos listados correspondam aos da requisição original. Uma CDN não necessariamente aplica essa regra por padrão: a Cloudflare documenta que não considera Vary nas decisões de cache, exceto para Vary: Accept-Encoding, a menos que a configuração Vary da regra de cache ou o recurso Vary for images esteja configurado. Confirme que a CDN varia seu cache de acordo com o cabeçalho antes de depender apenas de Vary. Quando a variante depende de parâmetros da URL, como largura, recorte ou formato, esses parâmetros devem permanecer na chave, e os padrões das CDNs também diferem nesse ponto: a chave de cache padrão da Cloudflare inclui a string de consulta, enquanto o Amazon CloudFront não armazena em cache com base nos parâmetros da string de consulta quando não está configurado para encaminhar strings de consulta à origem. Uma chave que omite uma entrada entrega a um solicitante a versão derivada de outro. Uma chave com mais informações do que precisa armazena duplicatas: o CloudFront recomenda armazenar em cache com base apenas nos parâmetros para os quais a origem retorna versões diferentes e observa que trata strings de consulta com diferenças de maiúsculas e minúsculas ou de ordenação como objetos separados.

Quando o cache de conteúdo é importante

Armazene em cache mídias e variantes solicitadas com frequência quando a menor latência e a redução da carga na origem forem mais importantes que os requisitos de atualidade. Chaves ou regras de invalidação incorretas podem entregar conteúdo desatualizado, privado ou que não corresponde ao solicitado.

Como a Transloadit ajuda com o cache de conteúdo

O Smart CDN da Transloadit armazena em cache na borda a saída de um Template. Quando o resultado não está no cache, ele importa o original do seu armazenamento e executa a Assembly; as requisições posteriores para a mesma URL são atendidas pela cópia em cache, sem executar a Assembly novamente. Os parâmetros de transformação fazem parte da URL, então cada combinação é solicitada e armazenada em cache como uma versão própria.

A primeira requisição para cada nova URL inclui o tempo para buscar e processar o original. Para URLs assinadas do Smart CDN, o tempo de vida efetivo de uma resposta no cache é limitado pelo tempo de vida restante da assinatura, então um prazo de expiração curto também reduz o período de reutilização de um resultado.

Explore os recursos de entrega da Transloadit

Fontes

Transforme conhecimento sobre mídia em um pipeline funcional

Conecte uploads, processamento, IA, armazenamento e entrega por meio de uma única API declarativa, com o stack de codificação, o ajuste de escala e as constantes mudanças de formatos gerenciados para você.

Experimente a Transloadit gratuitamente