HTTP 304 Not Modified (Não modificado)
O recurso não mudou desde a última versão guardada pelo cliente, que pode usar o cache.
Ficha rápida
| Código | 304 |
|---|---|
| Nome oficial (em inglês) | Not Modified |
| Nome em português | Não modificado |
| Grupo | Redirecionamento (3xx) |
| Definido em | RFC 9110, Section 15.4.5 |
| Quem costuma gerar | O servidor, para orientar o cliente sobre outro endereço ou sobre o cache. |
O que significa
Responde a uma requisição condicional (If-None-Match ou If-Modified-Since): o recurso não mudou desde a versão que o cliente já tem. A resposta não traz corpo, e o cliente reutiliza a cópia do cache, economizando tempo e dados.
Quando o servidor devolve esse código
- GET com If-None-Match cujo ETag ainda vale.
- GET com If-Modified-Since sem alteração desde a data informada.
Problemas comuns
- Esperar corpo em um 304.
- Cache de navegador mostrando versão antiga porque o ETag não muda.
Como resolver
- Use o cache local ao receber 304.
- Garanta que o ETag ou a data de modificação mudem quando o conteúdo mudar.
- Para testar sem cache, force a recarga.
Em automações e integrações
Fluxos raramente enviam requisições condicionais, mas, se você usa ETag para não baixar o mesmo dado de novo, trate o 304 como "nada mudou" e interrompa o processamento.
Não confunda com outros códigos
Não confunda com 200: no 304 não há corpo, e o cliente deve usar a cópia que já tem.
Exemplo de resposta
HTTP/1.1 304 Not Modified ETag: "v7"
O exemplo é ilustrativo: o corpo e os cabeçalhos reais mudam de servidor para servidor. O código e o nome seguem o padrão HTTP.
Perguntas frequentes
304 é erro?
Não. É uma resposta de sucesso que economiza transferência.
Por que meu navegador mostra a versão antiga?
Porque o cache foi validado como atual. Verifique ETag e Cache-Control.
Como o servidor decide devolver 304?
Compara o ETag ou a data de modificação enviados pelo cliente com os valores atuais do recurso. Se continuam iguais, responde 304 sem corpo.