
Когда мы отправляем на сервер запрос одной и той же структуры и с одними и теми же параметрами, он кешируется, поэтому когда нам нужно запросить новую порцию данных по этому же url, браузер говорит flash, что эти данные у него уже есть и запроса на сервер не делает. Это относительно распространенная проблема с кешированием в Internet Explorer. У меня она возникла при написании чата, требования к чату были такими, что можно было использовать только flash (только он помогает победить same-origin-policy), нужно было отправлять запросы к домену отличному от текущего. Подробнее о чате напишу как-нибудь в другой раз, про все эти политики безопасности и ограничения, и что предлагает flash для решения этих проблем. Итак, как исправлять ?!
Flash.
Решение в принципе лежит на поверхности, подобным пользуются не только в flash, это распространенный способ избежать кеширования в браузере. Мы просто добавляем уникальный параметр в запрос. В данном примере я использую timestamp через метод класса Date() – date.getTime(), который передаю в качестве параметра key в запросе.
var request:URLRequest = new URLRequest("http://domain.ru/chat_receive.php");
var variables:URLVariables = new URLVariables();
var date:Date = new Date();
variables.key = date.getTime();
request.data = variables;
request.method = URLRequestMethod.GET;
Важно передавать параметры через URLVariables, первый раз я просто добавил параметры прямо в строку url “http://domain.ru/chat_receive.php”, почему-то IE это не очень понравилось, и он все равно все успешно кешировал.
Back-end.
Теперь делаем фикс на back-end, у меня это PHP, но реализации для других языков отличается не существенно. Зачем мы это делаем ? Способ который помог избежать проблемы, не отключает кеширование, то есть информация все равно попадает в кеш, и теперь ее на порядки больше. Для того чтобы не забивать кеш браузера, мы ставим в заголовок параметр Expires. А также отдаем в заголовке параметры, что кешировать не надо (в отличие от других браузеров ie этого не слушается, для этого мы и передавали уникальный параметр). Вот что у нас получилось:
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-store, no-cache, must-revalidate"); // HTTP/1.1
header("Pragma: no-cache"); // HTTP/1.0
Все Internet Explorer побежден.




июля 16, 2010 в 10:32
Большое спасибо!
августа 25, 2010 в 19:34
Подскажите от чего может не работать флеш в IE еще.
Ваше решение не помогло((
php генерит файл отдает его флешу
заголовки следующие
while(ob_get_contents()) ob_end_clean();
header(“Content-Type: text/xml; charset=UTF-8;”);
echo $xml;
exit();
вставлял ваше решение после Content-Type.
А в остальных браузерах все в порядке
августа 26, 2010 в 12:28
В вашем коде я вижу только 1 заголовок, а зачем вы трогаете буфер вывода ? Просто поставьте все заголовки из примера, и кеша не будет. Какая версия IE, не 9я ? В ней не тестировал во всех остальных не кешируется.
Можно проверить посылаются ли правильные заголовки установив какой-нибудь прокси пакетов.
А про добавления уникального параметра в самом flash не забыли ?