【问题标题】:Firefox XMLHttpRequest sets error flag on a 302 responseFirefox XMLHttpRequest 在 302 响应上设置错误标志
【发布时间】:2009-12-18 07:31:38
【问题描述】:

我有一个由 servlet 驱动的 Web 应用程序,该应用程序在一段时间不活动后通过重定向到登录页面使用户会话超时。我在 Web 客户端上有代码检查了这一点,基本上类似于以下内容:

function error(request, errtype) {
    if (request.status == 302) {
        // Display a "timed out" dialog, then:
        window.location = request.getResponseHeader("Location");
    }
}

但是,最近这个方案停止了工作;超时时,request.status 为 0。使用 Firebug 我可以看到正在返回相同的 HTTP 302 响应。

我仔细阅读了 XMLHttpRequest 的规范,发现了这个部分:

如果重定向不违反安全性(例如同源)、无限循环预防措施,并且支持该方案,则在遵守同源请求事件规则的同时透明地遵循重定向。

否则,这是一个网络错误。

我什至不知道客户端应该自动遵循他们为响应 Ajax 请求而获得的重定向;我关心的浏览器以前没有这样做,因为我上面的代码曾经可以工作。我最近升级了我的 Firefox 版本,它现在可能更严格地遵循规范。规范规定的网络错误可以解释我看到的零响应代码。但是,我得到的重定向是到同一个主机(尽管在不同的端口上),不应该有无限循环,并且该方案仍然是 HTTP,所以我不明白为什么会出现网络错误.

有什么想法吗?

【问题讨论】:

    标签: javascript firefox xmlhttprequest


    【解决方案1】:

    你是如何获得这个功能的?如果您只是将其发送到 200 状态的“错误”,这显然是行不通的......

    request.onreadystatechange = function( )
    {
       if( this.readyState == 4 )
       {
          // if we got a 200
          if( this.status == 200 ){ /* cool */ }
    
          // if we got anything else
          else { error( this, this.status ); }
       }
    };
    

    但我假设你知道这一点。此外,您可能应该在window.location 的末尾包含 .href,并可能包含一个默认位置以防万一

    // Display a "timed out" dialog, then:
    window.location.href = request.getResponseHeader("Location") || defaultPage;
    

    如果这不起作用,您可能想在 onreadystatechange 方法中尝试不同的状态,因为某些浏览器可能会将非 200 状态解释为错误。这些可能是(来自您正在阅读的同一规范):

    0 (if it's considered aborted after unset, though unlikely)
    2 (headers-sent) as that 302 code is actually a HTTP header
    

    祝你好运!

    【讨论】:

    • 我正在使用 jQuery 的 Ajax 功能,我可能应该提到过。 jQuery 不会将处理函数附加到 XMLHttpRequest 对象;它轮询对象并调用用户提供的回调本身。在任何情况下,我都在 jQuery 的内部进行了一些探索,并在 Ajax 调用返回时打印出 XHR 对象的状态,正如所描述的,它基本上是空的,显然表明网络错误。但在 IE 和较低版本的 Firefox 中,XHR 对象包含指示 302 响应的正常数据。
    猜你喜欢
    • 2016-05-17
    • 2019-07-20
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多