Flash - HTTP-запросы не будут работать на localhost
Во-первых, я пытаюсь исправить то, что я не построил с самого начала, и парень, который проектировал это, уверяет меня, что он работал нормально, когда он ушел, хотя версия, которой я не коснулся с тех пор, как он ушел, кажется, имеет те же проблемы. Я также немного новичок в программировании в целом, поэтому дайте мне знать, если я пропустил важную информацию в своем первом посте, и я постараюсь добавить больше информации.
У меня есть флэш-приложение, размещенное онлайн, которое действует как клиент для серверного приложения, написанного на Delphi. Большая часть общения осуществляется с помощью сокетов, которые работают нормально. Загрузка файлов данных и загрузка файлов результатов выполняется с использованием HTTP-запросов, которые работают нормально, пока пользователь использует экземпляр сервера на другом компьютере. Однако, если пользователь установил серверное приложение на своем компьютере и попытался использовать его, указав в качестве URL localhost, связь с сокетом все еще работает, а запросы HTTP - нет.
Вся связь на основе сокетов работает нормально, и когда она не на локальном хосте, все HTTP-запросы также работают нормально, поэтому это так загадочно для меня. Я попытался изменить файл междоменной политики флэш-памяти, который сервер отправляет, чтобы он был полностью разрешающим, все порты, все домены, все заголовки http-запроса и все еще не повезло.
Приложение Flash будет ожидать локального хоста бесконечно большую часть времени, пока я не закрою приложение сервера, а затем выдам следующее сообщение об ошибке:
Error #2044: Unhandled SecurityErrorEvent:. text=Error #2048: Security sandbox violation: http://abcde.com/Testing.swf cannot load data from http://localhost:2188/guid=53D569A8-56EA-4AC2-BDA0-2F43525E1378.
Я попытался разместить его на нескольких компьютерах, каждая машина может получить доступ к экземпляру на другом, но не будет работать, когда попытается работать со своим собственным экземпляром.
Кроме того, если я просто http://localhost:2188/guid=53D569A8-56EA-4AC2-BDA0-2F43525E1378 в веб-браузер, файл результатов, который я пытаюсь получить, всплывает просто отлично.
Вот фрагмент кода во флэш-приложении, которое пытается загрузить файл:
private function downloadFile():void
{
trace("downloadFile: " + this.guid + " from " + this.server.URL);
fileRef.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
fileRef.addEventListener(ProgressEvent.PROGRESS, downloadProgressHandler);
var ur:URLRequest = new URLRequest("http://" + _server.URL + ":" + _server.port);
ur.url += "/guid=" + _guid;
ur.method = URLRequestMethod.GET;
fileRef.download(ur, _filename);
_downloadStart = true;
}
Если у кого-то есть хоть какое-то понимание, я был бы благодарен, потому что у меня совершенно нет идей здесь.
1 ответ
Это ограничение модели безопасности флеш-плеера. Чтобы обойти эту проблему, вы можете упаковать свою флэш-память как приложение AIR, и многие из этих ограничений безопасности будут сняты.
Вы также можете добиться большего успеха, если разместите свой флэш-файл на веб-сервере вместо локального доступа к.swf.
Еще одна вещь, которую вы не сможете сделать, - это получить доступ к локальным файлам из флеш-плеера, это еще один пример того, что вы можете сделать со средой выполнения AIR, чего вы не можете сделать во флеш-плеере.