¿Cómo vaciar la memoria caché del navegador mediante programación?

Resuelto Tower asked hace 12 años • 15 respuestas

Estoy buscando una manera de vaciar mediante programación el caché del navegador. Hago esto porque la aplicación almacena en caché datos confidenciales y me gustaría eliminarlos cuando presionas "cerrar sesión". Esto sucedería a través del servidor o JavaScript. Por supuesto, todavía se desaconseja el uso del software en computadoras públicas o extranjeras, ya que existen más peligros, como los registradores de claves, que simplemente no se pueden vencer a nivel de software.

Tower avatar Nov 16 '11 23:11 Tower
Aceptado

Actualización de 2023 : consulte el Clear-Site-Dataencabezado HTTP, a través del cual el servidor puede indicarle al navegador web de un cliente que borre el caché del sitio web para su dominio/subdominio, independientemente de los Cache-Controlencabezados anteriores. Sin embargo, es posible que los cachés intermedios aún tengan los datos almacenados en caché y no respeten el encabezado. (gracias, @nishanthshanmugham)

No hay forma de que un navegador te permita borrar su caché. Sería un gran problema de seguridad si eso fuera posible. Es muy fácil abusar de esto: en el momento en que un navegador admita dicha "función", será el momento en que la desinstale de mi computadora.

Lo que puedes hacer es decirle que no almacene en caché tu página, enviando los encabezados apropiados o usando estas metaetiquetas:

<meta http-equiv='cache-control' content='no-cache'>
<meta http-equiv='expires' content='0'>
<meta http-equiv='pragma' content='no-cache'>

También es posible que desees considerar desactivar la función de autocompletar en los campos del formulario, aunque me temo que existe una forma estándar de hacerlo ( consulta esta pregunta ).

De todos modos, me gustaría señalar que si trabaja con datos confidenciales debería utilizar SSL. Si no está utilizando SSL, cualquier persona con acceso a la red puede rastrear el tráfico de la red y ver fácilmente lo que está viendo su usuario.

El uso de SSL también hace que algunos navegadores no utilicen el almacenamiento en caché a menos que se indique explícitamente que lo hagan. Vea esta pregunta .

NullUserException avatar Nov 16 '2011 16:11 NullUserException

Es posible, simplemente puede usar jQuery para sustituir la 'metaetiqueta' que hace referencia al estado de la caché con un controlador/botón de eventos y luego actualizar, fácil.

$('.button').click(function() {
    $.ajax({
        url: "",
        context: document.body,
        success: function(s,x){

            $('html[manifest=saveappoffline.appcache]').attr('content', '');
                $(this).html(s);
        }
    }); 
});

NOTA: Esta solución se basa en la caché de aplicaciones que se implementa como parte de la especificación HTML 5. También requiere la configuración del servidor para configurar el manifiesto de App Cache. No describe un método mediante el cual se pueda borrar el caché del navegador "tradicional" mediante un código del lado del cliente o del servidor, lo cual es casi imposible de hacer.

 avatar Nov 08 '2012 15:11

use html en sí. Hay un truco que se puede usar. El truco consiste en agregar un parámetro/cadena al nombre del archivo en la etiqueta del script y cambiarlo cuando realice cambios en el archivo.

<script src="myfile.js?version=1.0.0"></script>

El navegador interpreta la cadena completa como la ruta del archivo, aunque lo que viene después del "?" son parámetros. Entonces, lo que sucede ahora es que la próxima vez que actualice su archivo, simplemente cambie el número en la etiqueta del script en su sitio web (Ejemplo <script src="myfile.js?version=1.0.1"></script>) y el navegador de cada usuario verá que el archivo ha cambiado y obtendrá una nueva copia.

Joish avatar Jan 21 '2017 10:01 Joish

La mejor idea es generar archivos js con nombre + algo de hash con versión, si necesita borrar el caché, simplemente genere nuevos archivos con un nuevo hash, esto hará que el navegador cargue nuevos archivos.

Admiral Duck avatar Sep 15 '2016 07:09 Admiral Duck

Aquí hay una sola línea sobre cómo puede eliminar TODO el caché de la red del navegador usando Cache.delete()

caches.keys().then((keyList) => Promise.all(keyList.map((key) => caches.delete(key))))

Funciona en Chrome 40+, Firefox 39+, Opera 27+ y Edge.

bdombro avatar Aug 21 '2020 16:08 bdombro