【发布时间】: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