Назад | Перейти на главную страницу

Одна страница, показывающая 3 запроса (также печатающие заголовки)

Кто-то из моей студии разработал веб-страницу несколько лет назад, и теперь клиент решил сменить сервер (он перешел на сервер Linux Apache, работающий под управлением Gen2 SMP, 64 бит, PHP версии 5.3.8, Standard MYSQL версии 5). Он внезапно начал делать странные вещи.

При нажатии на ссылку, требующую входа в систему, страница перенаправляет вас на страницу входа, используя header() функция в PHP. Любопытно, что на странице показано это:

хорошо

Сервер обнаружил внутреннюю ошибку или неправильную конфигурацию и не смог выполнить ваш запрос. Пожалуйста, свяжитесь с администратором сервера [адрес не указан] и сообщите им время возникновения ошибки и все, что вы могли сделать, что могло вызвать ошибку. Дополнительная информация об этой ошибке может быть доступна в журнале ошибок сервера. HTTP / 1.1 200 OK Дата: Пн, 15 октября 2012 г. 17:27:32 GMT Сервер: Apache / 2.2.22 (Unix) FrontPage / 5.0.2.2635 X-Powered-By: PHP / 5.3.8 Истекает: Чт, 19 ноября 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check = 0, pre-check = 0 Pragma: no-cache Keep-Alive: timeout = 5, max = 399 Подключение: Keep-Alive Кодировка передачи: фрагментированная Content-Type: text / html 232c

Затем сама страница, а затем еще один заголовок:

0 1f4

хорошо

Сервер обнаружил внутреннюю ошибку или неправильную конфигурацию и не смог выполнить ваш запрос. Пожалуйста, свяжитесь с администратором сервера, [адрес не указан] и сообщите им время возникновения ошибки и все, что вы могли сделать, что могло вызвать ошибку. Дополнительная информация об этой ошибке может быть доступна в журнале ошибок сервера. 0

Что наиболее интригует, так это то, что если вы обновите страницу или нажмете Enter на URL-адресе, она загрузится правильно. Я проверял логи, и это только вина несуществующего значка. Я также проверил .htaccess, все было правильно (RewriteBase был / как и предполагалось, и единственное, что есть другое правило, которое перемещает ^ en / requests в запрос? Lang = en. Кто-нибудь сталкивался с чем-то подобным?

редактировать: IE не запускает эти два заголовка. Это становится еще более странным.

Решение!: Как отметил @adaptr, это было вопросом PHP, а не каким-либо сервером. Последний кодер (я знаю, что винить предшественника невежливо, но эта ситуация отняла у меня слишком много времени) сделал следующее:

/* config.php -> included everywhere as a bootstrap*/
// ... constant/mysql setup

if($notLogged)
{
    $forward = ...;//previous url
    header("Location: ".WWW.LANG."/customer-area/login/index.php?forward=".$forward);
    exit;
}

Посмотрев глубже, что-то меня скрутило: exit; будет правильно отправлять заголовки или нет? Конечно, удалив это exit; продолжит выполнение страницы (я знаю, что это совсем не правильно, поэтому я не пробовал раньше). Однако, если заголовки не были отправлены полностью, это могло вызвать какие-либо проблемы (я не серверный парень, я не уверен в этом, извините, друзья). После удаления этого exit; вызов, страница формировалась правильно, заголовки «закрылись» (из-за начала вывода) и все шестеренки снова начали двигаться. Всем спасибо, ребята, лучшие наградили 100 баллов =)

Если журналы apache не показывают никаких ошибок, это означает, что PHP все это обработал, а также вернул клиенту странные ответы.

Включите правильное ведение журнала PHP и исследуйте, что он делает.

Этот бит в ответе является показательным:

Передача-кодирование: фрагментированное

Это означает, что PHP отправляет ответ в потоке (text / html), который не имеет определенного размера содержимого в заголовках.

Это может вызвать любой вывод заголовка (что-то, что PHP кеширует часто, т.е. генерируется не по порядку), который даже немного скользит, заставляя клиента думать, что отправляется новая страница.

Это всего лишь одна возможная причина; правильное ведение журнала PHP расскажет вам больше.

Вам нужно отлаживать код страницы, а не искать причину на сервере. Я вижу из того, что вы опубликовали, что было создано с использованием FrontPage (действительно, профессионал использовал это?), Поэтому он неизбежно содержит код, который не будет работать должным образом на платформе сторонних разработчиков. Исправьте код, удалив весь код Microsoft, и он может работать правильно.