HTTP 304 Not Modified
El validador de caché: nada cambió desde tu última visita, sigue usando la copia que ya tienes.
Qué significa HTTP 304
HTTP 304 Not Modified es la respuesta a una solicitud condicional. El cliente dice “tengo una copia de esta fecha” (If-Modified-Since) o “con esta huella” (If-None-Match), y el servidor confirma que la copia sigue vigente respondiendo 304 sin cuerpo.
Este mecanismo — la revalidación de caché — es lo que hace rápidas las cargas repetidas de página: el navegador solo vuelve a descargar lo que cambió, y todo lo demás cuesta un único viaje de ida y vuelta pequeño.
Causas comunes de las respuestas 304
- El navegador revalidó una página, script o imagen en caché y no había cambiado.
- Un edge de CDN revalidó su objeto almacenado contra el origen.
- Un cliente de API usó ETags para sondear un recurso de forma económica.
Buenas prácticas para desarrolladores
- Sirve cabeceras ETag o Last-Modified estables para que los clientes puedan revalidar en absoluto.
- No incluyas un cuerpo de respuesta con 304 — el cliente ya lo tiene explícitamente.
- Cuidado con los ETags que cambian en cada respuesta (por ejemplo, de servidores con balanceo de carga con hashes por nodo): deshabilitan silenciosamente la revalidación.
Ejemplo de respuesta
GET /styles.css HTTP/1.1 If-None-Match: "abc123" HTTP/1.1 304 Not Modified ETag: "abc123" Cache-Control: max-age=3600
Impacto en el SEO
Las respuestas 304 son buenas para el rendimiento del SEO: Googlebot usa mucho las solicitudes condicionales, y una revalidación correcta le permite rastrear más de tu sitio con el mismo presupuesto. Los validadores rotos fuerzan descargas completas en cada rastreo.
Preguntas frecuentes
¿Es una respuesta 304 un error?
No — es una señal de éxito que significa que tu copia en caché sigue siendo válida. Los navegadores la manejan de forma transparente.
¿Qué desencadena una respuesta 304?
Una solicitud que lleva cabeceras If-None-Match o If-Modified-Since cuyos valores siguen coincidiendo con el recurso actual.
¿Por qué veo 304 en DevTools en lugar de 200?
El navegador tenía una copia en caché y la revalidó. El estado muestra que el servidor confirmó la caché en lugar de reenviar el archivo.