Estoy desarrollando una aplicación web y quiero que todas las imágenes (un par de cientos de MB - 20 000 - 50 000 miniaturas) se descarguen una vez y nunca se vuelvan a descargar, ya que en realidad no cambian. Además, esas imágenes se descargan de los servidores de YouTube y no quiero forzar sus servidores innecesariamente.
Pero el problema es que, cuando vuelvo a cargar la página, vuelven a lloverme solicitudes, en lugar de cargar las imágenes en caché. Esto sucede cuando navego a mi página y cuando la vuelvo a cargar, pero cuando abro otra página y presiono hacia atrás, las imágenes se cargan desde el caché. Cuando agrego dinámicamente contenido nuevo con JavaScript, las imágenes también se cargan desde el caché.
Entonces, ¿qué me estoy perdiendo?
PD: estoy recargando con el botón de recarga cerca de la barra de direcciones, no con Ctrl+R u otra combinación de teclas que limpie el caché.
PPS Para aclarar antes de que alguien comente eso, no estoy descargando todas esas miles de imágenes a la vez
Para los archivos en la aplicación que no cambiarán, generalmente puede agregar un almacenamiento en caché agresivo enviando el encabezado de respuesta a continuación. Esto incluye archivos estáticos que son servidos por la aplicación, como imágenes, archivos CSS y archivos JavaScript, por ejemplo. Además, consulte también el encabezado Expires.
Cache-Control: public, max-age=604800, immutablePara responder a su pregunta, la mejor manera sería crear un servidor web (con Node.js, ASP.NET Core, Php, etc.) Su servidor debería guardar los recursos en una carpeta estática con una edad máxima.
Los navegadores usan el encabezado HTTP Cache-Control para determinar si un activo debe recuperarse del caché o descargarse nuevamente.
Dado que está vinculando las imágenes de YouTube, no puede establecer ningún encabezado HTTP; Los servidores de YouTube determinan la configuración del caché.
La forma más sencilla de establecer la configuración de caché es descargar primero las imágenes de YouTube y guardarlas en su propio servidor. Luego puede configurar los encabezados Cache-Control cuando sirve las imágenes desde su servidor.
Otra opción puede ser enviar por proxy las solicitudes HTTP de imágenes de YouTube:
YourServer.com/image/123.pngYouTube.com/img/123.png , utilizando los encabezados de caché deseados. Una redirección HTTP podría funcionar, pero esto puede hacer que los encabezados de caché de YouTube anulen los encabezados de caché. Es posible que su servidor solo tenga que transmitir los datos de la imagen desde YouTube.com.