Es bien conocido que Internet Explorer aggressively caches ajax calls mientras que todos los demás navegadores toman los datos frescos cada vez. Esto generalmente es malo: nunca he encontrado un caso en el que quiera que ajax NO contacte al servidor. Firefox, Safari y los otros navegadores lo saben y no almacenan en caché las llamadas ajax.Grails: la mejor manera de enviar encabezados de caché con cada llamada de ajax
para prevenir EI de almacenamiento en caché, que tiene que hacer uno de los siguientes:
- añadir una ficha cachebuster a la cadena de consulta (como
?time=[timestamp]
) - enviar una cabecera de respuesta HTTP que prohíbe específicamente IE para almacenar en caché la solicitud
- utilizar un POST de Ajax en lugar de un GET
me gusta mucho más el establecimiento de un encabezado no-cache. Es la forma correcta: le dice a todos los navegadores que no guarden en la memoria caché, que es exactamente lo que pretendes. El método de cadena de consulta llena el caché del navegador con cosas que nunca se recuperarán, dejando menos espacio para el contenido legítimo del caché. Y el método POST es una corrupción de HTTP: los POST son para modificar datos.
En Grails, ¿cuál es la mejor manera de enviar automáticamente un encabezado do-not-cache para todas las solicitudes ajax? No quiero modificar ningún controlador, así que creo que tiene que haber un buen truco de filtro o algo así.
Gracias!
El problema es definitivamente en IE7 también. Thx, nos ayudó. – Chris
También puede usar if (request.xhr) para averiguar si su solicitud es a través de AJAX. –