O que significa
A cópia em cache que o cliente já tem continua válida, então o servidor não envia corpo. Responde a uma requisição condicional com If-None-Match ou If-Modified-Since.
Causas comuns
- O ETag em If-None-Match corresponde à versão atual
- O recurso não mudou desde If-Modified-Since
- Um navegador revalidando um recurso em cache
Como resolver
Se você é o cliente ou visitante
Use o corpo em cache. Se o conteúdo parecer desatualizado, o validador pode estar errado; force o recarregamento ou verifique a geração do ETag.
Se você mantém o site ou a API
Gere ETags estáveis (idênticos em todos os servidores atrás de um balanceador) e envie os mesmos cabeçalhos de cache que enviaria com 200.
Resposta de exemplo
HTTP/1.1 304 Not Modified
Date: Tue, 07 Oct 2025 09:30:00 GMT
Server: nginx
ETag: "33a64df5"
Cache-Control: max-age=3600 Especificação
Perguntas frequentes
› 304 é um erro?
Não. Ele economiza banda ao dizer ao cliente que o cache está atualizado.
› Por que os usuários veem arquivos antigos após um deploy?
Os cabeçalhos de cache permitem cópias antigas. Use nomes de arquivo com hash para os assets e max-age curto com validação para o HTML.