Os headers (cabeçalhos) de cache são componentes fundamentais no controle de como os recursos da aplicação são armazenados em cache, tanto pelos navegadores (cache do cliente) quanto por proxies intermediários (como o Peqi, por exemplo). Uma configuração adequada desses cabeçalhos pode resultar em melhorias significativas na velocidade de carregamento das páginas, eficiência da largura de banda e na experiência geral do usuário. Vamos explorar os cabeçalhos de cache mais comuns e como eles são usados para controlar o comportamento do cache.
Cache-Control
O cabeçalho Cache-Control é um dos mais poderosos e flexíveis para controle de cache. Ele permite especificar diretrizes tanto para caches privados (navegadores) quanto públicos (proxies e CDNs).
max-age=[segundos]: especifica o tempo máximo em que um recurso é considerado novo.
no-cache: obriga que o cache revalide o recurso com o servidor antes de servir a versão cacheada.
no-store: instrui o cache a não armazenar uma cópia do recurso sob quaisquer circunstâncias.
public: indica que a resposta pode ser armazenada por qualquer cache, mesmo se a resposta é normalmente não cacheável.
private: a resposta é destinada a um único usuário e não deve ser armazenada por caches compartilhados.
must-revalidate: o cache deve revalidar o recurso expirado antes de usá-lo, garantindo que o conteúdo não esteja desatualizado.
Expires
O cabeçalho Expires é usado para definir uma data/hora específica após a qual a resposta é considerada obsoleta. Se o conteúdo é estático e não muda frequentemente, esse cabeçalho pode ser uma forma simples de controlar o cache.
ETag
O cabeçalho ETag fornece um identificador único para uma versão de um recurso. Isso permite um método de validação eficiente: o cliente pode enviar um cabeçalho If-None-Match com o ETag em solicitações subsequentes. Se o recurso não mudou, o servidor pode responder com um status 304 (Not Modified), indicando que o cache pode ser reutilizado.
Last-Modified
Semelhante ao ETag, o cabeçalho Last-Modified indica a última vez que o recurso foi modificado. Os clientes podem enviar um cabeçalho If-Modified-Since em solicitações subsequentes. Se o recurso não foi modificado desde então, o servidor responde com 304, permitindo que o cache seja usado.
Pragma
O cabeçalho Pragma é um cabeçalho HTTP/1.0, geralmente usado apenas como um fallback para compatibilidade com caches HTTP/1.0 onde o cabeçalho Cache-Control não é suportado. O valor Pragma: no-cache é equivalente a Cache-Control: no-cache.
Vary
O cabeçalho Vary informa ao cache que a resposta solicitada é variável com base em um ou mais cabeçalhos de solicitação. Por exemplo, Vary: User-Agent indica que uma resposta diferente pode ser armazenada e servida com base no agente do usuário que faz a solicitação.