【问题标题】:How to catch an expected (and intended) 302 Ajax response?如何捕获预期的(和预期的)302 Ajax 响应?
【发布时间】:2010-05-05 02:39:06
【问题描述】:

因此,如果您回顾一下我关于 Exchange 自动发现的 previous question,您会发现获取自动发现 URL 的最简单方法是向服务器发送一个不安全、未经过身份验证的 GET 请求,阿拉:

http://autodiscover.exchangeserver.org/autodiscover/autodiscover.xml

服务器将响应 302 重定向,并在 Location 标头中使用正确的 url。

我一开始正在尝试一些非常简单的 Chrome 扩展程序,我有:

if (req.readyState==4 && req.status==302) {
    return req.getResponseHeader("Location");
}

使用完整的 XML Post 和用户凭据设置另一个 ajax 调用,

但是 Chrome 在此时挂起,查看开发人员面板显示它没有返回响应,而是表现得好像没有给出响应,同时显示一个

Uncaught Error: NETWORK_ERR: XMLHttpRequest Exception 101

在错误日志中。

在我看来,引用确切的响应状态与“捕获”它大致相同,但我不确定问题是否出在 Chrome/WebKit 上,或者这是否是 XHR 请求始终处理重定向的方式。

我不确定如何捕捉到这一点,以便我仍然可以从响应中获取标头。

或者是否可以设置一个辅助 XHR,这样当它获得 302 时,它会发送一个完全不同的请求?

快速更新

我只是更改了它,使其不检查响应代码:

if (req.readyState==4) {
    return req.getResponseHeader("Location");
}

当我提醒它的值时,它是null。并且在开发控制台中仍然存在相同的错误并且没有响应。因此,它似乎要么没有将 302 响应作为响应进行跟踪,要么在清除该响应之后发生了某些事情?

【问题讨论】:

    标签: ajax redirect google-chrome xmlhttprequest http-status-code-302


    【解决方案1】:

    请参阅the w3c docs on xhr:XHR 将透明地跟随重定向或返回网络错误(就像您从 Chrome 看到的那样),具体取决于重定向的目标是否与原始请求位于同一来源。所以你的代码根本没有机会捕捉到 302 响应。这就是未设置“Location”响应标头的原因:此时,您正在检查最终响应的标头,而不是 302 响应。

    【讨论】:

    • 很高兴知道它既是官方的又是跨浏览器的,但这真的是一个失败的原因吗?当然必须有一些 XHR 的替代品(除了浏览器本身)来获得响应吗?即使我可以打开 iFrame,除了 Chrome,我无法查看 HTTP 标头,而在 Mozilla(我正在测试的另一件事)的情况下,我不能只打开 iframe来自一个 js 文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多