3xx · Redirecciones
Código HTTP 304 Not Modified: qué significa
El código 304 Not Modified indica que el recurso no ha cambiado desde la última vez que el navegador lo descargó, así que puede usar su copia en caché. El servidor no envía el cuerpo, lo que ahorra ancho de banda. Funciona con las cabeceras ETag/If-None-Match y Last-Modified/If-Modified-Since.
Qué significa el código 304
La primera vez, el servidor envía el fichero con un ETag (una huella del contenido) o una fecha Last-Modified. La siguiente vez el navegador pregunta "¿ha cambiado desde este ETag?". Si no, el servidor contesta 304 sin cuerpo y el navegador usa lo que ya tiene.
Es una buena señal: tu caché funciona. Ver muchos 304 en los logs es normal en una web con visitantes recurrentes.
Cuándo aparece
- Recarga de una página con recursos ya cacheados.
- Googlebot también usa peticiones condicionales para ahorrar rastreo.
Qué tener en cuenta
- Si los cambios no se ven tras desplegar, el problema no es el 304 sino la caché larga sin revalidar: usa nombres de fichero con hash (main.3f9a.js) para los estáticos.
- Para el HTML, usa Cache-Control: no-cache (revalida siempre) en lugar de cachearlo días.
Configuración y comandos
nginx: estáticos con hash para siempre, HTML siempre revalidado
location ~* \.(js|css|woff2)$ {
add_header Cache-Control "public, max-age=31536000, immutable";
}
location / {
add_header Cache-Control "no-cache";
try_files $uri $uri/index.html /index.html;
}Ejemplo de respuesta
GET /static/css/main.css HTTP/1.1
If-None-Match: "6adc822b-3b"
HTTP/1.1 304 Not Modified
ETag: "6adc822b-3b"Herramientas para comprobarlo
Preguntas frecuentes
¿El 304 es un error?
No. Es una optimización: el servidor confirma que tu copia en caché sigue siendo válida.