A cópia em cache ainda é válida.
Quando usar
Ao responder a uma requisição condicional com If-None-Match ou If-Modified-Since.
Bom saber
O 304 responde a uma requisição condicional. Quando uma resposta traz um cabeçalho ETag ou Last-Modified, o navegador depois envia If-None-Match ou If-Modified-Since, e o servidor responde 304 sem corpo se nada mudou, economizando banda. Um 304 deve repetir cabeçalhos como ETag, Cache-Control e Vary, para que o cache possa atualizar a cópia armazenada e o seu tempo de expiração.
ETags gerados por máquina, como os antigos ETags do Apache baseados em inode, diferem entre servidores atrás de um load balancer, então os clientes raramente recebem 304. A compressão também pode alterar ou enfraquecer ETags. No DevTools, um 304 transfere algumas centenas de bytes, enquanto “from disk cache” com status 200 significa que nenhuma requisição foi feita. O fetch esconde as revalidações do navegador e as informa como 200 com o corpo em cache.
Redirecionamento (3xx)
Os códigos 3xx são redirecionamentos: o cliente precisa ir para outro lugar, ou usar a cópia em cache, para concluir a requisição.
Como fica
HTTP/1.1 304 Not ModifiedComo enviar
| Node.js / Express | res.status(304).end() |
|---|---|
| Python / Flask | return '', 304 |
| nginx | return 304; |
Como verificar
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/