Flash - HTTP-запросы не будут работать на localhost - PullRequest
0 голосов
/ 12 июня 2010

Во-первых, я пытаюсь исправить то, что я не построил с самого начала, и парень, который проектировал это, уверяет меня, что он работал нормально, когда он ушел, хотя версия, которой я не коснулся с тех пор, как он ушел похоже, есть те же проблемы. Я также немного новичок в программировании в целом, поэтому дайте мне знать, если я пропустил важную информацию в своем первом посте, и я постараюсь добавить больше информации.

У меня есть флэш-приложение, размещенное онлайн, которое действует как клиент для серверного приложения, написанного на 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 Ответ

0 голосов
/ 12 июня 2010

Это ограничение модели безопасности флеш-плеера. Чтобы обойти эту проблему, вы можете упаковать свою флэш-память как приложение AIR, и многие из этих ограничений безопасности будут сняты.

Вы также можете добиться большего успеха, если разместите свой флэш-файл на веб-сервере вместо локального доступа к .swf.

Еще одна вещь, которую вы не сможете сделать, - это доступ к локальным файлам из флэш-плеера, это еще один пример того, что вы можете сделать со средой выполнения AIR, чего не можете сделать во флэш-плеере.

...