У меня есть веб-приложение, управляемое сервлетом, которое блокирует сеансы пользователей после определенного периода бездействия путем перенаправления на страницу входа. У меня был код в веб-клиенте, который проверил это, по сути, похоже на следующее:
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, поэтому я не понимаю, почему я получаю сетевую ошибку .
Есть идеи?