La copia en caché sigue siendo válida.
Cuándo usarlo
Al responder a una solicitud condicional con If-None-Match o If-Modified-Since.
A tener en cuenta
304 responde a una solicitud condicional. Cuando una respuesta lleva una cabecera ETag o Last-Modified, el navegador envía después If-None-Match o If-Modified-Since, y el servidor responde 304 sin cuerpo si nada ha cambiado, lo que ahorra ancho de banda. Un 304 debería repetir cabeceras como ETag, Cache-Control y Vary, para que la caché pueda actualizar su copia guardada y su tiempo de caducidad.
Los ETag generados por máquina, como los antiguos de Apache basados en el inode, difieren entre servidores detrás de un balanceador de carga, así que los clientes rara vez obtienen un 304. La compresión también puede cambiar o debilitar los ETag. En DevTools, un 304 transfiere unos cientos de bytes, mientras que “from disk cache” con estado 200 significa que no se hizo ninguna solicitud. fetch oculta las revalidaciones del navegador y las presenta como 200 con el cuerpo en caché.
Redirección (3xx)
Los códigos 3xx son redirecciones: el cliente tiene que ir a otro sitio, o usar su copia en caché, para completar la solicitud.
Cómo se ve
HTTP/1.1 304 Not ModifiedCómo enviarlo
| Node.js / Express | res.status(304).end() |
|---|---|
| Python / Flask | return '', 304 |
| nginx | return 304; |
Cómo comprobarlo
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/