Содержимое по умолчанию добавляется в заголовки 301 с помощью PHP 5.3.5 / IIS7 - PullRequest
0 голосов
/ 08 ноября 2011

Вкл. http://www.hesa.ac.uk, мы используем пользовательский сценарий обработки 404, чтобы перенаправить пользователей, например, http://www.hesa.ac.uk/press на фактический URL, который является уродливым CMS: http://www.hesa.ac.uk/index.php?option=com_content&task=category&sectionid=1&id=1&Itemid=161

У нас работает fast-cgi.

Отправляется заголовок 301, затем заголовок местоположения.

Он отлично работает для 99% наших пользователей, но некоторые из них сообщают 5до 6 секунд загрузки.Мы думаем, что это происходит из-за небольшого количества паразитного контента, который появляется в перенаправлении:

<head><title>Document Moved</title></head>
<body><h1>Object Moved</h1>This document may be found <a HREF="http://www.hesa.ac.uk/index.php?option=com_content&amp;task=category&amp;sectionid=1&amp;id=1&amp;Itemid=161">here</a></body>

Это не выводится нигде в коде, который мы можем видеть.Вот метод, который фактически выполняет перенаправление:

    /**
 * Do the actual redirection to the win URL
 *
 */
function doRedirection() {


        //start output buffering to trap any content that is output by default by the headers
        @ob_start();

        //permanently moved header
        //header( 'HTTP/1.1 301 Moved Permanently' );

        //fast-cgi, so use this:        
        header('Status: 301 Moved Permanently', true);              

        @ob_end_clean(); // clear output buffer

        //location header
        header( "Location: ". $this->winUrl );  

        @ob_end_clean(); // clear output buffer

        die();



}

Я не могу найти какой-либо ресурс, который указывает, как остановить вывод этого дополнительного бита контента.Я пробовал различные варианты описанного выше способа для перенаправления.

У кого-нибудь была подобная проблема?У кого-нибудь есть идеи?

Приветствия,

G

РЕДАКТИРОВАТЬ: мы узнали, что это ожидаемое поведение для IIs7, но IIS6 никогда не делал это стот же код, и ожидаемо это или нет, наши пользователи жалуются, и это, кажется, является проблемой.

РЕДАКТИРОВАТЬ 2: кажется, что единственное реальное решение - отказаться от этого подхода и вместо этого перейти к URL-адресу IIS7функциональность переписывания, которая влечет за собой написание класса C #, который клонирует функциональность класса PHP и затем подключает его к IIS.

EDIT 3: HOWEVER, установка заголовка content-length: 0 может помочь.Пока не проверено.

1 Ответ

0 голосов
/ 16 ноября 2011

Оказывается, проблема заключалась в использовании встроенной PHP-функции getHostByAddr () в коде перенаправления.Хосты клиентов, для которых не установлены должным образом свои записи DNS, испытывают задержку от 5 до 6 секунд от getHostByAddr () (в IIS7 у нас никогда не было таких проблем с IIS6).Если вы найдете альтернативную функцию и поменяете ее местами, проблема исчезнет.

...