как добавить Content-Length в заголовки сервера

Label

Guest
Label

Извиняюсь, ежли что, тока второй день с PHP разбраюсь.. но созрел насущный вопрос:

Конфигурация:
Sys: SunOS SunFire 5.8
Version: Apache/2.0.52 (Unix) PHP/4.3.10
ZLib Support: enabled (1.2.1)

Проблема:
Отсутствие выдачи заголовка Content-Lingth при больших объемах. Тестировалось на файлах php в которых нет ни одной php инструкции. Просто расширение php, много html-данных и все...

Использование Transfer-Encoding: chunked это конечно же хорошо, но лучше размер, ибо сказано:
Many older HTTP/1.0 applications do not understand the Transfer-Encoding header. (RFC2068 раздел 14.40).

Собственно, все было бы не так плохо, если бы указанная конфигурация выдавала длину при старом протоколе, но на запрос:

  • GET /i2.php HTTP/1.0
    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
    User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)
    Host: somehost.ru
она отвечает:

  • HTTP/1.1 200 OK
    Date: Wed, 19 Jan 2005 02:56:28 GMT
    Server: Apache/2.0.52 (Unix) PHP/4.3.10
    X-Powered-By: PHP/4.3.10
    Connection: close
    Content-Type: text/html; charset=koi8-r
и все.. мол сами дорогой клиент считайте...

Вопрос: где в PHP настраивается обязательная выдача Content-Length ВМЕСТО (поскольку сказано в RFC Messages MUST NOT include both a Content-Length header field and the "chunked" transfer coding. If both are received, the Content-Length MUST be ignored) chunked ?

Варианты "написать в скрипте:

  • <?
    ob_start();
    ob_implicit_flush(0);

    ..... .....

    $page = ob_get_contents();
    header('Content-Length: ' . strlen($page));
    ob_end_flush();
    ?>
не подходят...

С уважением и пр.
 

tony2001

TeaM PHPClub
>Варианты "написать в скрипте: <skip> не подходят
больше вариантов нет.
PHP выдает динамический контент и выдает его порционно, не считая его длину перед выдачей.

а в чем, собственно, необходимость этого хидера?

p.s. темы нормально называй, плз.
 

Label

Guest
И все-же, есть ли иной путь, чем downgrade-1.0 force-response-1.0 ?

>а в чем, собственно, необходимость этого хидера?
Необходимость - в наличие косяков в IE.
Уже кажись разобрались, что PHP, походу тут не при чем.
Симтомы похожие на http://www.lexa.ru/apache-talk/msg03520.html


2Screjet: Не нужно умничать. Keep-Alive, конечно связано, но отнюдь не так жестко, как вам кажется.
Сокетам-сокетово, а клиентам-клиентово (точнее WinInet-ово :)
Вот напр. типичный ответ IIS-а напр.:

  • HTTP/1.1 200 OK
    Cache-Control: public
    Content-Length: 15341
    Content-Type: text/html
    Expires: Tue, 18 Jan 2005 13:24:15 GMT
    Last-Modified: Tue, 18 Jan 2005 10:37:35 GMT
    Server: Microsoft-IIS/6.0
    X-AspNet-Version: 1.1.4322
    P3P: CP="ALL IND DSP COR ADM CONo CUR CUSo IVAo IVDo PSA PSD TAI TELo OUR SAMo C
    NT COM INT NAV ONL PHY PRE PUR UNI"
    X-Powered-By: ASP.NET
    Date: Tue, 18 Jan 2005 12:59:05 GMT
    Connection: keep-alive
Это ответ с www.microsoft.com.

Знают поди, что IE ключит не по-децки от чунков, потому и не пользуют :)))
 

Screjet

Новичок
Когда разовое соединение
(Connection: close)
Клиент (браузер) читатет файл до конца (EOF). И нет никакой необходимости (серверу) передавать размер документа.

Когда соединение "остается живым"
(Connection: Keep-Alive),
тогда сервер обязательно говорит клиенту о размере документа, (т.к. EOF не ожидается). И в том же соединении (peer) сервер ожидает от клиента (браузера) новые запросы.

Я думал ты самостоятельно найдешь это в RFC.
 

Label

Guest
Уф. еще раз вопрос

Вопрос был не про keep-alive. Что это такое и зачем оно я знаю.

Просто пишите пожалуйств внимательно. Вы сами себе противоречите, ибо у нас в этом именно и есть проблема, что Когда соединение "остается живым" (Connection: Keep-Alive), тогда сервер обязательно говорит клиенту о размере документа.
Вот он ответ PHP из-за которого и завелся этот топик:

  • HTTP/1.1 200 OK
    Date: Wed, 19 Jan 2005 04:38:42 GMT
    Server: Apache/2.0.52 (Unix) PHP/4.3.10
    X-Powered-By: PHP/4.3.10
    Keep-Alive: timeout=15, max=100
    Connection: Keep-Alive
    Transfer-Encoding: chunked
    Content-Type: text/html; charset=koi8-r
где тут размер документа??? :)


Повторяю вопрос. Есть ли в PHP какие-либо настройки, которые бы позволяли Апачу держать кип-алив, поддерживать с клиентом HTTP версии 1.1, но сообщали бы клиенту длину переданных данных тела HTTP-ответа в заголовке ответа Content-Length?
Поскольку в IE с чунками недецкие косяки (случайно возникающие, периодические, при большом кол-ве динамических картинок, фреймах и пр.).

Теоретически нет проблемы пихать динамический контент в трубу, а клиент разбирает по декларируемой длине. Если IE так стабильнее работает, не нам это в силах изменить.
 
Сверху