giovedì 30 ottobre 2014

AngularJs, Internet Explorer e la cache

Oggi ho combattuto un mostro invisibile: la cache di Internet Explorer.
Scrivendo un'applicazione con AngularJs, ricaricavo via XmlHttpRequest una lista, che ero sicuro doveva essere variata, e su Internet Explorer 11 ottenevo sempre gli stessi dati, mentre su Chrome e Firefox la lista veniva correttamente ricaricata.
Dopo quasi un giorno di ricerche, ho scoperto che il motivo è la cache.
Sembra che Internet Explorer faccia caching delle chiamate, almeno con AngularJs. Come specificato nell'esempio, un trucco molto semplice per "scuotere" IE è quello di passare a parametro un timestamp. Ma mi sembra poco elegante, sinceramente.
C'è un modo per far funzionare correttamente le cose, come ci spiegano in questo articolo, e cioè disabilitando la cache nell'http provider.
Da notare che la risposta, molto velocemente, dice di mettere un

$httpProvider.defaults.headers.get['If-Modified-Since'] = '0';

A me questa direttiva andava in conflitto con l'autenticazione, perchè cancellava tutti i cookies a bordo.
Invece, usando il codice

$httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
$httpProvider.defaults.headers.get['Pragma'] = 'no-cache';

tutto funziona, anche l'autenticazione.

Nessun commento:

Posta un commento