O que é controle de cache? | Cache explicado

O controle de cache dita o comportamento do armazenamento em cache para um site, permitindo que os navegadores saibam com que frequência atualizar os recursos armazenados localmente.

Objetivos de aprendizado

Após ler este artigo, você será capaz de:

  • Definir controle de cache
  • Descrever o cache do navegador
  • Descrever várias diretivas de controle de cache

Copiar o link do artigo

O que é controle de cache?

O controle de cache é um cabeçalho HTTP que dita o comportamento de armazenamento em cache do navegador. Em poucas palavras, quando alguém visita um site, seu navegador salva determinados recursos, como imagens e dados do site, em um armazenamento chamado cache. Quando esse usuário revisita o mesmo site, o controle de cache define as regras que determinam se esse usuário terá esses recursos carregados a partir de seu cache local ou se o navegador precisará enviar uma solicitação ao servidor para obter novos recursos. Para entender o controle de cache com mais profundidade, é necessário um entendimento básico sobre armazenamento em cache do navegador e cabeçalhos HTTP.

O que é armazenamento em cache do navegador?

Conforme explicado acima, o armazenamento em cache do navegador é quando um navegador da web salva recursos do site para que não precise buscá-los novamente em um servidor. Por exemplo, uma imagem de plano de fundo em um site pode ser salva localmente no cache para que, quando um usuário visitar essa página pela segunda vez, a imagem seja carregada dos arquivos locais do usuário e a página seja carregada muito mais rapidamente.

Os navegadores armazenam esses recursos apenas por um período de tempo especificado, conhecido como Tempo até entrar no ar (TTL). Se um usuário solicitar um recurso em cache após a expiração do TTL, o navegador terá que entrar em contato com o servidor novamente e baixar uma nova cópia do recurso. Como os navegadores e servidores web conhecem o TTL de cada recurso? É aqui que os cabeçalhos HTTP entram em ação.

O que são cabeçalhos HTTP?

O Protocolo de Transferência de Hipertexto (HTTP) descreve a sintaxe para comunicações na World Wide Web e essa comunicação consiste em solicitações de clientes para servidores e respostas de servidores de volta para clientes. Essas solicitações e respostas HTTP vêm marcadas com uma série de pares de valores-chave chamados de cabeçalhos.

Esses cabeçalhos contêm muitas informações importantes sobre cada comunicação. Por exemplo, um cabeçalho de solicitação geralmente contém:

  1. Informações sobre qual recurso está sendo solicitado
  2. Qual navegador o cliente está usando
  3. Quais os formatos de dados que o cliente aceitará

Os cabeçalhos de resposta geralmente incluem informações sobre:

  1. Se a solicitação foi ou não atendida com sucesso
  2. O idioma e o formato de quaisquer recursos no corpo da resposta.

Um cabeçalho de controle de cache pode aparecer em solicitações e respostas HTTP.

O que há em um cabeçalho de controle de cache?

Os cabeçalhos consistem em pares de valores-chave separados por dois pontos. No controle de cache, a "chave", ou a parte à esquerda dos dois pontos, é sempre o "controle de cache". O "valor" é o que se encontra à direita dos dois pontos e pode haver um ou vários valores separados por vírgula no controle de cache.

Esses valores são chamados de diretivas e determinam quem pode armazenar em cache um recurso, bem como por quanto tempo esses recursos podem ser armazenados em cache antes de serem atualizados. Abaixo, veremos algumas das diretivas de controle de cache mais comuns:

controle de cache: privado

Uma resposta com uma diretiva "privado" só pode ser armazenada em cache pelo cliente e nunca por um agente intermediário, como uma CDN ou um proxy. Geralmente, são recursos que contêm dados privados, como um site que exibe as informações pessoais de um usuário.

controle de cache: público

Por outro lado, a diretiva "público" significa que o recurso pode ser armazenado por qualquer cache.

controle de cache: sem armazenamento

Uma resposta com uma diretiva "sem armazenamento" não pode ser armazenada em cache em nenhum lugar, nunca. Isso significa que toda vez que um usuário solicita esses dados, uma solicitação deve ser enviada ao servidor de origem para uma nova cópia. Essa diretiva geralmente é reservada para recursos que contêm dados extremamente sensíveis, como informações de contas bancárias.

controle de cache: sem cache

Esta diretiva significa que as versões em cache do recurso solicitado não podem ser utilizadas sem antes verificar se há uma versão atualizada. Isto normalmente é feito usando uma ETag.

Uma ETag é outro cabeçalho HTTP que contém um token exclusivo para a versão do recurso no momento em que foi solicitado. Esse token é alterado no servidor de origem sempre que o recurso é atualizado.

Quando um usuário retorna a uma página com um recurso "sem cache", o cliente sempre terá que se conectar ao servidor de origem e comparar a ETag no recurso em cache com uma no servidor. Se as ETags forem idênticas, o recurso armazenado em cache será fornecido ao usuário. Caso contrário, isso significa que o recurso foi atualizado e o cliente precisará baixar uma nova versão para fornecer ao usuário. Esse processo garante que o usuário esteja sempre obtendo a versão mais atualizada desse recurso sem exigir downloads desnecessários.

controle de cache: max-age

Essa diretiva determina o tempo até entrar no ar, em outras palavras, quantos segundos um recurso pode ser mantido em cache após o download. Por exemplo, se o tempo máximo for definido como 1800, isso significa que por 1.800 segundos (30 minutos) após o recurso ter sido solicitado pela primeira vez do servidor, o usuário receberá uma versão em cache desse recurso em solicitações subsequentes. Se o usuário solicitar o recurso novamente após 30 minutos, o cliente terá que solicitar uma nova cópia do servidor de origem.

A diretiva "s-maxage" é especificamente para caches compartilhados, como CDNs e determina por quanto tempo esses caches compartilhados podem continuar mantendo o recurso do cache. Esta diretiva substitui a diretiva "max-age" para clientes individuais.

Por que o controle de cache é importante?

O armazenamento em cache do navegador é uma ótima maneira de preservar recursos e melhorar a experiência do usuário na internet, mas sem o controle de cache, seria muito frágil. Todos os recursos em todos os sites seriam vinculados às mesmas regras de armazenamento em cache, o que significa que as informações sensíveis seriam armazenadas em cache da mesma forma que as informações públicas e os recursos atualizados com frequência seriam armazenados em cache pelo mesmo período de tempo que os que raramente mudam.

O controle de cache adiciona a flexibilidade que torna o armazenamento em cache do navegador realmente útil, permitindo que os desenvolvedores determinem como cada recurso será armazenado em cache. Ele também permite que os desenvolvedores definam regras especiais para intermediários, o que explica por que sites que usam uma CDN, como a CDN da Cloudflare, tendem a ter uma performance melhor do que sites que não usam.