XMLHttpRequest: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Riga 70:
Funzionalità simili sono incluse in [[Document Object Model|DOM]] Livello 3 "Load and Save", già raccomandazione del [[W3C]].
Tuttavia, per ora ([[2005]]), nessun web browser supporta in modo completo questa specifica. XMLHttpRequest è comunque pensato come uno standard di fatto per il futuro.
==Problemi noti==
===La cache di Microsoft Internet Explorer==
Il browser di casa Microsoft implementa una cache per le richieste GET. Gli sviluppatori che non sono abituati al caching non si aspettano che le richieste GET vengano memorizzate, oppure che essa venga ignorata come per il tasto di refresh. In alcune situazioni, non riuscire ad evitare la cache genera problemi al punto di poter essere considerato un bug. Una soluzione a questo è di utilizzare il metodo POST nelle request, che non viene mai memorizzato in cache.
Ci sono diversi modi per cercare di aggirare il problema. Il primo consiste nel settare nell'header per la voce "Expires" una data già passata farà evitare il caching delle risposte. Un esempio in [[PHP]]
header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); // disable IE caching
header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . " GMT" );
header( "Cache-Control: no-cache, must-revalidate" );
header( "Pragma: no-cache" );
Invece nelle Java Servlet:
response.setHeader( "Pragma", "no-cache" );
response.addHeader( "Cache-Control", "must-revalidate" );
response.addHeader( "Cache-Control", "no-cache" );
response.addHeader( "Cache-Control", "no-store" );
response.setDateHeader("Expires", 0);
In alternativa è possibile costringere l'oggetto XMLHttpRequest ad effettuare la richiesta nel seguente mod:
req.open( "GET", "xmlprovider.php" );
req.setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" );
req.send( null );
Un ultimo metodo è di aggiungere una stringa casuale alla fine dell'URL nella richiesta HTTP, facendo credere quindi al browser di richiedere una pagina diversa:
req.open( "GET", "xmlprovider.php?sid=" + Math.random());
E' importante notare che le tecniche mostrate dovrebbero essere utilizzate '''solo''' quanto il caching risulta essere inappropriato e da evitare. Se questi metodi fossero usati indiscrinatamente, l'applicazione potrebbe risentirne in termini di prestazioni.
==Collegamenti esterni==
|