Qué significa
La copia en caché que tiene el cliente sigue siendo válida, así que el servidor no envía cuerpo. Responde a una petición condicional con If-None-Match o If-Modified-Since.
Causas habituales
- El ETag de If-None-Match coincide con la versión actual
- El recurso no cambió desde If-Modified-Since
- Un navegador revalida un recurso en caché
Cómo solucionarlo
Si eres el cliente o visitante
Usa el cuerpo en caché. Si el contenido parece desactualizado, el validador puede estar mal; fuerza la recarga o revisa cómo se generan los ETag.
Si administras el sitio o la API
Genera ETag estables (iguales en todos los servidores detrás de un balanceador) y envía las mismas cabeceras de caché que enviarías con un 200.
Respuesta de ejemplo
HTTP/1.1 304 Not Modified
Date: Tue, 07 Oct 2025 09:30:00 GMT
Server: nginx
ETag: "33a64df5"
Cache-Control: max-age=3600 Especificación
Preguntas frecuentes
› ¿304 es un error?
No. Ahorra ancho de banda al indicar al cliente que su caché está al día.
› ¿Por qué los usuarios ven archivos viejos tras un despliegue?
Las cabeceras de caché permiten copias antiguas. Usa nombres de archivo con huella para los recursos y un max-age corto con validación para el HTML.