Internet Explorer заставляет 304 при проверке состояния входа в систему - PullRequest
2 голосов
/ 09 июня 2011

У меня есть проблема запроса статуса ajax для IE, возникающая на демонстрационном сайте, который я создаю для своей компании.

В каждом браузере Internet Explorer (7-9) эта проблема возникает,хотя он работает как чемпион во ВСЕХ других:

после успешного входа в систему, пользователь перенаправляется на целевую страницу, которая запускает запрос статуса входа в систему.

Если этот запрос статуса входа в систему приходитобратно с чем-либо, кроме «1», страница перенаправляется обратно на страницу входа в систему.

Если вы отслеживаете трафик в инструментах разработчика, вы видите, что запрос для этой конкретной проверки состояния приводит к 304 Не изменено(НИКОГДА не должно происходить), и тело запроса появляется ПУСТО.(Он всегда возвращает 0 или 1) ...

ЖЕСТКОЕ обновление (CTRL-F5) страницы с этой проверкой, все равно приводит к 304 из браузера.

Отслеживание этих 304 с помощью fiddler показывает, что по этому URL-адресу состояния входа в сеть даже нет запроса на то, что БРАУЗЕР САМ принимает 304 и не может отправить запрос.

при прямом посещении URL-адреса ответ ВСЕГДА равен 200 с ожидаемым соответствующим 0 или 1, но когда ajax'ed, он чаще всего равен 304 и никогда не отправляет по сети даже для подтверждения304 с сервера.

Очистка истории браузера, похоже, не влияет на то, меняет ли 304 304 на 200.

вдвойне странно, что каждые 10 или около того попыток это действительно работает, изапрос возвращается 200 с реальным ответом, но чаще всего он возвращается 304 без ответа, и значение не равно 1 с кэшированным значением (даже не уверен, что оно равно?!)

Я изменил ответ на этот запрос, чтобы следующие заголовки были сгенерированы php:

header('Cache-Control: no-cache');
header('Pragma: no-cache');
header('Expires: -1');

При посещении URL-адреса непосредственно в IE эти заголовки присутствуют, а когда появляется 304, их нет.

Это как если бы IE активно игнорировал этот конкретный запрос ...

Любые идеи?

Опять же, это работает в КАЖДОМ другом браузере, буквально, но в IE разных ароматов.

1 Ответ

4 голосов
/ 09 июня 2011

Попробуйте добавить случайный параметр строки запроса в URL вашего запроса статуса. как:

'/your/url?breakcache='+Math.random()
...