HTTP状态代码503在Flash中抛出错误#2030

时间:2014-09-03 15:49:24

标签: actionscript-3 flash http error-handling urlloader

我正在尝试在Flash视频播放器中加载广告,然后下载VAST文件中链接的所有1x1 Impression gif。一切顺利,直到我点击此文件:

link to bad file

此文件返回状态代码302(暂时移动),其中Location标头指向http://httpstat.us/503 - 这是一种非常奇怪的返回503错误的方法

当发生这种情况时,我在Flash中收到错误#2030:“遇到文件结束。”

查看http://httpstat.us/503,Content-Length为23并且与返回文本的长度完全匹配(“503 Service Unavailable”),因此我不认为这是服务器响应的问题。

在我的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);

所以我的问题是:我做错了什么?我该如何检测和处理Flash中的状态代码503?

1 个答案:

答案 0 :(得分:1)

在尝试了这个之后我发现它是Flash Player中的一个错误 - 当你收到302时,Flash Player会秘密地旋转一个新的URLLoader来处理第二个请求,但会映射所有的事件和函数调用。因为它是一个单独的对象,所以抛出的任何错误都不会被捕获。

我的解决方案是为503错误添加一个全局的静态计数器,然后有一个未被捕获的错误处理程序。

  1. 收到503错误,递增计数器
  2. 收到未被捕获的错误,请检查计数器:
    • 如果错误ID是2030并且计数器> 0,递减计数器
    • 否则,抛出错误