HTTP 304 Not Modified

O validador de cache: nada mudou desde sua última visita, continue usando a cópia que você já tem.

O que significa o HTTP 304

HTTP 304 Not Modified é a resposta a uma requisição condicional. O cliente diz "eu tenho uma cópia desta data" (If-Modified-Since) ou "com esta impressão digital" (If-None-Match), e o servidor confirma que a cópia ainda está atual respondendo 304 sem corpo.

Esse mecanismo — revalidação de cache — é o que torna os carregamentos de página repetidos rápidos: o navegador baixa novamente apenas o que mudou, e tudo o mais custa uma única e pequena ida e volta.

Causas comuns de respostas 304

  • O navegador revalidou uma página, script ou imagem em cache e ele não havia mudado.
  • Uma edge de CDN revalidou seu objeto armazenado em relação à origem.
  • Um cliente de API usou ETags para consultar um recurso de forma econômica.

Boas práticas para desenvolvedores

  • Sirva cabeçalhos ETag ou Last-Modified estáveis para que os clientes possam revalidar de fato.
  • Não inclua um corpo de resposta com 304 — o cliente explicitamente já o tem.
  • Cuidado com ETags que mudam a cada resposta (por exemplo, de servidores balanceados por carga com hashes por nó): eles desativam silenciosamente a revalidação.

Exemplo de resposta

GET /styles.css HTTP/1.1
If-None-Match: "abc123"

HTTP/1.1 304 Not Modified
ETag: "abc123"
Cache-Control: max-age=3600

Impacto no SEO

Respostas 304 são boas para o desempenho de SEO: o Googlebot usa requisições condicionais intensamente, e a revalidação correta permite que ele rastreie mais do seu site com o mesmo orçamento. Validadores quebrados forçam novos downloads completos a cada rastreamento.

Perguntas frequentes

Uma resposta 304 é um erro?

Não — é um sinal de sucesso significando que sua cópia em cache ainda é válida. Os navegadores o tratam de forma transparente.

O que dispara uma resposta 304?

Uma requisição carregando cabeçalhos If-None-Match ou If-Modified-Since cujos valores ainda correspondem ao recurso atual.

Por que vejo 304 no DevTools em vez de 200?

O navegador tinha uma cópia em cache e a revalidou. O status mostra que o servidor confirmou o cache em vez de reenviar o arquivo.