Код состояния HTTP 503 выдает ошибку # 2030 во Flash

Я пытаюсь загрузить рекламу в видеопроигрыватель Flash, а затем загрузить все GIF-файлы Impression 1x1, связанные в файле VAST. Все работает хорошо, пока я не нажму на этот файл:

ссылка на неверный файл

Этот файл возвращает код состояния 302 (временно перемещен) с заголовком Location, указывающим на http://httpstat.us/503. -- очень странный способ вернуть ошибку 503

Когда это происходит, я получаю сообщение об ошибке #2030 во Flash: «Обнаружен конец файла».

Глядя на http://httpstat.us/503, Content-Length равен 23 и точно соответствует длине вернул текст ("503 Служба недоступна"), поэтому я не думаю, что это проблема с ответом сервера.

В моем файле Flash я привязал слушателей к событиям SecurityError и IOError:

    loader.addEventListener(Event.OPEN, onOpen);
    loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, onStatus);
    loader.addEventListener(ProgressEvent.PROGRESS, onProgress);
    loader.addEventListener(Event.COMPLETE, onComplete);

    loader.addEventListener(IOErrorEvent.IO_ERROR, onError);
    loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onError);

    loader.load(request);

Итак, мой вопрос: что я делаю неправильно? Как я должен обнаруживать и обрабатывать код состояния 503 во Flash?


person stevendesu    schedule 03.09.2014    source источник
comment
У меня есть стандартная Error #2032: Stream Error. для этого URL   -  person fsbmain    schedule 03.09.2014
comment
@fsbmain Это странно ... У меня есть глобальный обработчик необработанных ошибок, который просто регистрирует время и идентификатор ошибки и сообщает 12:08:29 — ОБНАРУЖЕН АВАРИЙНЫЙ СБРОС — Ошибка: # 2030. Трассировка стека состоит всего из двух строк: flash.net.URLLoader.onComplete, за которой следует flash.net.URLStream.readBytes.   -  person stevendesu    schedule 03.09.2014
comment
@fsbmain Я только что провел еще несколько тестов и обнаружил, что когда я открываю SWF локально (файл://C:\...), я получаю сообщение об ошибке № 2032. Когда я открываю его онлайн (http://...), я получаю ошибку № 2030. Так что это может быть связано с Flash Sandbox.   -  person stevendesu    schedule 03.09.2014


Ответы (1)


Поэкспериментировав с этим, я обнаружил, что это ошибка Flash Player — когда вы получаете 302, Flash Player тайно запускает новый URLLoader для обработки второго запроса, но сопоставляет все события и вызовы функций. Так как это отдельный объект, любые возникающие ошибки не будут обнаружены.

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

  1. Получите ошибку 503, увеличьте счетчик
  2. Receive an uncaught error, check counter:
    • If error ID is 2030 AND counter > 0, decrement counter
    • В противном случае скиньте ошибку
person stevendesu    schedule 01.10.2014