【问题标题】:Flex: HTTP request error #2032Flex:HTTP 请求错误 #2032
【发布时间】:2010-12-02 06:58:28
【问题描述】:

在 Flex 3 应用程序中,我使用 HTTPService 类向服务器发出请求:

var http:HTTPService = new HTTPService();
http.method = 'POST';
http.url = hostUrl;
http.resultFormat = 'e4x';
http.addEventListener(ResultEvent.RESULT, ...);
http.addEventListener(FaultEvent.FAULT, ...);
http.send(params);

该应用程序具有 Comet 架构。所以它会发出长时间运行的请求。在等待对该请求的响应时,可以同时发出其他请求。

该应用程序在大多数情况下都能正常工作。但有时某些客户端在执行长时间运行的请求时遇到 HTTP 请求错误:

faultCode:Server.Error.Request
faultString:'HTTP request error'
faultDetail:'Error: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032"]. URL: http://example.com/ws'

我认为这取决于用户的浏览器。

有什么想法吗?

【问题讨论】:

    标签: apache-flex actionscript-3 http comet


    【解决方案1】:

    当我在 HttpRequest 中发送更长的(3-4K!)参数时,我遇到了同样的问题。一旦我发送了较小的,它就起作用了(没有刷新,重新加载或任何东西)。我不知道您可以发送的参数长度是否在客户端或 Web 服务器端有限制,但这肯定会导致问题。
    url limitations may cause it

    【讨论】:

      【解决方案2】:

      这个错误看起来很笼统,我建议尝试收集更多信息并分享有关该问题的信息。

      • This post 看起来与您的情况相似。
      • This post 可能会帮助您找到更多有用的调试信息。
      • 哪些客户受到影响?
      • 您能否捕获 http 状态代码或使用 Charles、Wireshark 或类似工具发送的流量?

      【讨论】:

        【解决方案3】:

        尝试使用flash.events.HTTPStatusEvent.HTTP_STATUS监听请求的HTTP状态
        这可能会给你一些关于出了什么问题的更多信息。

        【讨论】:

        • 也试试 flash.events.HTTPStatusEvent.HTTP_RESPONSE_STATUS 是你在播出吗
        【解决方案4】:

        我打算就基本相同的主题提出另一个问题,但我认为两个未回答的问题比 1 个更糟糕。

        我从我们拥有的 Flex 应用程序的一些用户那里得到了类似的间歇性问题,但症状略有不同。我可以提供的全部信息是:

        1. 它也发生在短 (10ms) 请求中。
        2. 它似乎是随机发生的。
        3. 连接通过 SSL。
        4. 它只发生于 IE 用户,不适用于使用 FireFox 的用户。
        5. 一旦发生,用户会告诉我他们需要关闭 IE 并重新启动它(有些用户说他们需要重新启动,但我认为这不太可能只是 IE 重新启动)。似乎需要几分钟才能自行重置。
        6. 它似乎不会影响用户的其余 Internet 连接 - 他们可以继续使用其他 IE 窗口。
        7. 一旦发生,来自 flex 应用程序的任何 HTTPService 请求似乎都不起作用。
        8. 它(显然)只发生在一小部分用户身上。最初它 似乎是由于他们与主服务器的物理距离,但这不再是 似乎必然如此(尽管可能是连接质量问题)。
        9. 我不清楚用户运行的是什么版本的 Adob​​e Flash。 代码是使用 Adob​​e Flex 3.4 (linux) 构建的
        10. 该应用程序执行大量请求,其中许多请求是并行的,但我无法重现该问题。
        11. 用户确实建议在几分钟后返回应用程序后出现此错误。
        12. 服务器日志中似乎没有相关的服务器端请求条目,这表明请求从未到达服务器(可能从未离开客户端)。
        13. 服务器使用相关缓存头响应所有请求以关闭 IE 缓存。

        我们目前的解决方法是要求用户在 FireFox 中运行应用程序。

        错误的完整转储是:

        HTTP Status Code: null
        Fault Code: Server.Error.Request
        Fault Error ID: null
        Fault Detail: Error: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032"]. URL: https://my.server/url
        Fault String: HTTP request error
        Fault Name: Error
        Fault Message: faultCode:Server.Error.Request faultString:'HTTP request error' faultDetail:'Error: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032"]. URL: https://my.server/url'
        Root Cause: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032"]
        

        很多人都提到了错误2032,有的甚至只提到了IE下的间歇性错误,但没有提到解决方法。如果我找到了,我会在这里更新我的帖子。

        更新

        在发生这种情况时与用户交谈后,我们发现以下内容:

        1. 用户可以在 IE 中打开一个新选项卡,然后正常加载相同的 flex 应用程序 - 因此不会出现 Internet 连接问题。
        2. 用户可以在出现错误的 flex 应用选项卡中加载 google.com - 因此似乎没有与该特定选项卡相关的连接问题。
        3. 用户可以将带有损坏应用程序的选项卡中的地址复制到另一个选项卡中,然后将加载 flex 应用程序。
        4. 用户可以在 flex 应用中断的选项卡中加载 google.com 后,再次复制 flex 应用 URL,然后立即解决问题。

        似乎在我的特定应用程序中,我的 flex 应用程序设法破坏了 flash 插件/VM,以至于在破坏后,不允许对 URL 的进一步请求。

        我对此感到非常困惑,我建议用户使用 FireFox,或者将应用程序包装在 Air 包中。

        【讨论】:

          【解决方案5】:

          我在这里遇到了同样的问题,但使用的是 Flash (Web - Flex 4.1 SDK) 应用程序。 在尝试了各种各样的解决方案后,我们缩小了范围,最终找到了一个对所有系统都非常可靠的解决方案,包括新安装的机器。

          一个。在 flex 预初始化阶段,在应用程序的根(或阶段)添加全局事件侦听器。

          IOErrorEvent.IO_ERROR
          IOErrorEvent.NETWORK_ERROR
          HTTPStatusEvent.HTTP_STATUS
          ErrorEvent.ERROR
          SecurityErrorEvent.SECURITY_ERROR
          

          如果出现错误 - event.preventDefault();

          B。为 App 中使用的每个加载器添加事件监听器,以解决以下错误:

          IOErrorEvent.IO_ERROR
          SecurityErrorEvent.SECURITY_ERROR
          HTTPStatusEvent.HTTP_STATUS
          

          *尝试恢复,例如退回到外部接口调用...

          C。将 bin-release 文件夹中的所有 SWZ 文件与 SWF 文件一起放在用于交付应用程序的服务器上的同一路径中。 在我的情况下,这些是需要的文件:

          sparkskins_4.5.1.21328.swz
          spark_4.5.1.21328.swz
          textLayout_2.0.0.232.swz
          rpc_4.5.1.21328.swz
          osmf_1.0.0.16316.swz
          framework_4.5.1.21328.swz
          

          * 为了发现这一点,我使用 Chrome 开发者控制台查看页面上发生了哪些错误,并在应用程序尝试下载这些文件时发现了一连串 404。

          D。有一个正确配置的 crossdomain.xml 策略文件,其中包含允许 http 请求 xml 标记。

          <allow-http-request-headers-from domain="*" headers="*"/>
          

          在您的特定情况下根据需要替换 *。

          干杯

          【讨论】:

            【解决方案6】:

            听起来你可能有更多的连接出去,然后浏览器支持。您知道错误发生时存在多少打开的连接吗?

            不同的浏览器允许同时打开的连接数不同。 IE 6,7,8 都允许不同的数量:http://support.microsoft.com/kb/282402

            火狐:http://www.speedguide.net/faq_in_q.php?qid=231

            【讨论】:

              【解决方案7】:

              我的 Air 应用程序中发生了这个确切的问题。我最终意识到我不小心将urlrequest.idleTimeout 设置为10。这个超时实际上是以毫秒为单位的,我的网络服务器是本地的,所以如果我没有向我的本地服务器发送任何参数(没有获取或发布)它会起作用。每当我随请求一起发送任何参数时,它当然会失败,因为我的脚本运行和返回数据的时间超过 10 毫秒。

              您可能需要注意加载缓慢的脚本。您可以通过强制一些静态输出进行调试,然后停止该页面进一步执行。在我的 php 页面中,我放了:

              <?php
              echo "hello=hi";
              die();
              ?>
              

              此外,请确保在沙盒限制范围内对其进行调试。我使用的是自签名 ssl 证书,尝试连接到本地测试网络服务器时出现很多警告。

              希望有帮助!

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2022-01-04
                • 1970-01-01
                相关资源
                最近更新 更多