Показать сообщение отдельно
Старый 23.06.2008, 20:53
H1dd3n вне форума Посмотреть профиль Отправить личное сообщение для H1dd3n Найти все сообщения от H1dd3n
  № 1  
Ответить с цитированием
H1dd3n

Регистрация: Jun 2008
Сообщений: 1
Question Кеширование ответов от php-скрипта при обращении из флеша (AS 3)

Постараюсь описать проблему максимально подробно:

допустим, имеется php-скрипт (php 5.2.6) с именем Test.php:
Код:
<?php
header("Cache-Control: no-cache");
header("Pragma: no-cache");
echo("Responce");
?>
размещенный на сервере Apache (apache 2.2.8 win32) и доступный в локальной сети по адресу, например: http://10.10.10.10/Test.php.

Если я обращаюсь к этому скрипту через Internet Explorer (v. 6), то он успешно выдает ответ (т.е. строку "Responce"), и при этом ответ не кешируется на клиенте, как оно и должно быть - в соответствии с http-заголовками (т.е. в папке ...\Temporary Internet Files\Content.IE5 никаких файлов не создается).

Если же я организую обращение к этому файлу из флеш-приложения (AS 3) следующим образом:
Код:
var loader:URLLoader = new URLLoader();
var req:URLRequest = new URLRequest();
req.url = "http://10.10.10.10/Test.php";
req.method = URLRequestMethod.POST;
loader.dataFormat = URLLoaderDataFormat.TEXT;
loader.addEventListener(ErrorEvent.ERROR, On_loader_Error);
loader.addEventListener(IOErrorEvent.IO_ERROR, On_loader_IOError);
loader.addEventListener(Event.COMPLETE, On_loader_Complete);
		
var timer:Timer = new Timer(1000, 0);
timer.addEventListener(TimerEvent.TIMER, On_timer_Timer);
timer.start();
		
function On_timer_Timer(event:TimerEvent):void
{
    loader.load(req);
}
		
function On_loader_Error(event:ErrorEvent):void     { trace("Error"); }
		
function On_loader_IOError(event:IOErrorEvent):void { trace("IOError"); }
		
function On_loader_Complete(event:Event):void       { trace(loader.data); }
и открою этот swf-файл браузером (swf-файл тоже выложен на Apache и доступен как, например: http://10.10.10.10/Flash.swf), то все ответы от php-скрипта будут кешироваться (т.е. папка ...\Temporary Internet Files\Content.IE5 будет бесконечно забиваться файлами вида 'Test.htm[0]', содержащими слово Responce).

Насколько я себе представляю флеш использует механизм кеширования браузера, поэтому не понятно из-за чего возникает это кеширование при обращении из флеша, когда при тех же http-заголовках и прямом обращение из браузера его нет.

Добавление в php-скрипт других http-заголовков для управления кешированием, как то:
header('Expires: Mon, 26 Jul 1990 05:00:00 GMT');
header('Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
так же ни к чему не приводит.

В результате я не могу организовать постоянный обмен данными с серверным скриптом, так как на клиенте бесконечно забивается папка с кешем.

Отмечу, что в Firefox'е этой проблемы нет - ничего лишнего не пишется ни на винчестер, ни в оперативную память.

Буду рад любым идеям по этому поводу. Заранее спасибо.