Возможно, это самая странная вещь, которую я видел. Когда я выполняю HTTP GET из Firefox, Chrome или I8, Apache вернет ответ 200 (ok). Но когда я отправляю тот же запрос из IE8 в режиме совместимости, сервер возвращает 302 (временное перенаправление) и отправляет сервер в бесконечный цикл перенаправления.
У меня есть журналы сервера, чтобы доказать это. Обычно я получаю такой ответ:
127.0.0.1 - - [09/Nov/2010:13:02:25 -0600] "GET /tabby/members/login HTTP/1.1" 200 5712 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12"
Но с IE8 в режиме совместимости я получаю такой ответ:
127.0.0.1 - - [09/Nov/2010:13:03:17 -0600] "GET /tabby/members/login/ HTTP/1.1" 302 - "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; .NET4.0C; InfoPath.3)"
IE будет повторять запрос снова и снова, бесконечно. Это происходит как на моей локальной машине разработки (Windows), так и на моем тестовом сервере (Linux).
Я подозреваю одну из двух причин. Во-первых, это правила перезаписи в моем файле .htaccess. Я также использую PHP для установки заголовка местоположения в некоторых моих скриптах, который должен генерировать 302.
Вот мой файл .htaccess:
# Turn on URL rewriting
RewriteEngine On
# Installation directory
RewriteBase /tabby/
# Protect application files from being viewed
RewriteRule ^(application) - [F,L]
# Allow any other files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/
RewriteRule .* index.php/$0 [PT,L]
Есть ли какие-нибудь известные проблемы с тем, как IE7 обрабатывает 302 ответа? Почему Apache отправляет 200 для одних браузеров и 302 для других?
Что /tabby/members/login
- может быть программа, которая обнюхивание браузера а есть баг?