4

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

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 响应作为响应进行跟踪,要么在消除该响应之后发生了某些事情?

4

1 回答 1

3

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

于 2010-05-05T04:04:26.490 回答