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
no-cacheouno-store?no-storeinstrui todos os caches, privados ou compartilhados, a não guardar a resposta.no-cachepermite armazenar a resposta, mas proíbe reutilizá-la sem antes revalidá-la com a origem. Quando a resposta contém um validador comoETagouLast-Modifiede a origem responde a requisições condicionais, um recurso inalterado custa uma pequena troca com resposta304 Not Modifiedem 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-cacheainda permite o armazenamento, e a RFC 9111 afirma queno-storenão é um mecanismo confiável ou suficiente para garantir privacidade. Uma CDN também pode tratarno-cachede forma diferente da RFC. A Cloudflare documenta que, com seu recurso Origin Cache Control desabilitado, não armazena uma respostano-cacheem cache de forma alguma e, com o recurso habilitado, armazena a resposta em cache e sempre a revalida.- Uma resposta sem
Cache-Controlfica 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 desdeLast-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 resposta200para 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émCache-ControlnemExpires, 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. - 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 recomendaCache-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 continhaAuthorization, a menos que a resposta permita explicitamente essa reutilização compublic,s-maxageoumust-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.privatecontrola apenas onde uma resposta pode ser armazenada; a RFC 9111 afirma que essa diretiva não pode garantir a privacidade do conteúdo. - 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 emVary; 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 consideraVarynas decisões de cache, exceto paraVary: 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 deVary. 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.
Fontes
- RFC 9111: cache HTTP (chaves de cache, atualidade, validação, diretivas Cache-Control)
- MDN: cache HTTP (caches privados, compartilhados e gerenciados; validação; padrões comuns)
- Cloudflare: comportamento padrão do cache e extensões de arquivo armazenadas em cache por padrão
- Cloudflare: Origin Cache Control, tratamento de diretivas Cache-Control e comportamento padrão de Vary
- Cloudflare: chaves de cache (o que a chave de cache padrão inclui)
- Amazon CloudFront: armazenar conteúdo em cache com base nos parâmetros da string de consulta