304 Not Modified responde a uma requisição GET ou HEAD condicional, ou seja, que traz If-None-Match ou If-Modified-Since, quando a condição mostra que a cópia armazenada pelo cliente ainda está atualizada. Em vez de enviar o recurso de novo, o servidor responde 304 e o cliente usa a cópia em cache. Isso economiza banda e tempo.
Um 304 nunca tem corpo; ele termina na linha em branco depois dos cabeçalhos. Dos cabeçalhos Cache-Control, Content-Location, Date, ETag, Expires e Vary, o servidor precisa enviar aqueles que um 200 teria incluído, para que os caches possam atualizar a resposta armazenada.
Embora o 304 esteja na faixa 3xx, ele não é um redirecionamento. Não há Location, e o cliente permanece na mesma URL. Um cliente que recebe um 304 sem ter enviado uma requisição condicional está falando com um servidor com defeito.
Exemplo de resposta
HTTP/1.1 304 Not Modified
Date: Fri, 06 Nov 2026 10:15:32 GMT
ETag: "5f2b-1a3c"
Last-Modified: Wed, 28 Oct 2026 08:02:11 GMT
Cache-Control: public, max-age=600
Vary: Accept-Encoding SEO e verificação de redirecionamentos
O 304 ajuda no rastreamento. Os rastreadores do Google dão suporte a requisições condicionais, e um 304 informa ao Googlebot que o conteúdo não mudou desde o último rastreamento. Isso economiza capacidade de rastreamento e carga no servidor enquanto a página mantém seu lugar no índice; por isso, vale a pena ter cabeçalhos ETag ou Last-Modified confiáveis, principalmente em sites grandes.
Por padrão, o TrueURL não envia cabeçalhos condicionais; por isso, você verá 200, e não 304. Para testar a revalidação, adicione um cabeçalho If-None-Match com o ETag da página em Cabeçalhos de requisição personalizados.
Causas comuns e casos de uso
- Um navegador revalida uma página, imagem ou script em cache com
If-None-Match, e oETagainda corresponde. - Um rastreador ou leitor de feeds busca o recurso de novo com
If-Modified-Since, e nada mudou. - Os visitantes veem conteúdo desatualizado depois de um deploy porque o servidor continua respondendo 304: os validadores não mudaram, por exemplo um
ETaggerado a partir do tamanho e da data de modificação do arquivo, que o deploy preservou. Garanta que os validadores mudem sempre que o conteúdo mudar.