Сервер выводит какие-то свои метки перед HTML

akxxiv

Новичок
Сервер выводит какие-то свои метки перед HTML

Собственно проблема вот в чем http://www.antcspb.ru/
Может не у всех это проявится, но все же, верстка в ИЕ едет. И дело в том, что сервер всавляет перед доктайпом какие-то цифры. Есть подозрение, что хостер переехал на ngnix, а под ним такие косяки наблюдались. Только не пойму как от них избавиться.
Может кто встречался и справился?
 

Alexandre

PHPПенсионер
Код:
[b]3405[/b]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<head>
Код:
<address>Apache/2.2.4 (Unix) mod_ssl/2.2.4 OpenSSL/0.9.8g PHP/5.2.3 Server at default_1gb_server Port 80</address>
 

akxxiv

Новичок
Мда, опять. Я так и не понял как от этого избавится. В том топике решил проблему насильно пересадив сайт на обслуживание Апача. Но там был наш сервант, а здесь хрен знает кто обслуживает, видимо 1gb.
 

akxxiv

Новичок
Да, в том случае был наш выделенный сервер, на котором можно было все.
В данном случае сервер не наш, я только сайт сделал и залил. После чего он нормально работал пол года, я и забыл про него. А сегодня позвонили )))
 

fixxxer

К.О.
Партнер клуба
удивительно, как люди занимаются веб-разработкой не зная протокола http :)
 

kruglov

Новичок
Хм, если ваши сайты на разных хостингах глючат одинаково, может, не в Nginxах дело?

Там у вас внутреннего кэширования, когда сайт сам себя по HTTP дергает, нету точно?
 

akxxiv

Новичок
kruglov
Может и не в гниксах. Но раньше не наблюдалось такого.
Эта CMS-ка была написана года 4 назад. Суть такая Анализируется URL делается запрос к базе. Выдергиваются параметры относящиеся к данному Урлу. (шаблон, модуль, параметры ...)
делается ob_start(),
Инклюдится модуль, который отрабатывает и записывает в буфер результат и переопределяет глобальные переменные (title, decription....)
Делается $content = od_end_clean();

Потом опять ob_start(),
Инклюдится шаблон
$html = od_end_clean();
$html = str_replace(%метки_в_шаблоне%, Переменные_определенные_на_пред._этапах, $html)

echo $html;


Все до просто. И работало это без проблем до 2007 года. А вот в 2007 время от времени стали наблюдаться такие-вот глюки. С чего вдруг хз...

-~{}~ 26.03.08 12:35:

И что еще хреновенько, что мне на локалке не воспроизвести эту ошибку
 

kruglov

Новичок
У меня cms так же примерно себя ведет, но лишних цифр никогда ни на каких хостингах не наблюдалось.

Цифры эти, напомню, представляют собой шестнадцатеричные длины кусков контента, передаваемого через Transfer-encoding: chunked. Но браузеру отдается chunked, закодированный 2 раза, типа *.zip.zip.

Вы там в своем CMS нигде не эмулируете этот chunked? Какие заголовки выдаете скриптом?
 

akxxiv

Новичок
хз. Не помню уже что там было. Буду иксть разбираться... Судя по всему буду смотреть где выдаются заголовки и идет буферизация....

-~{}~ 26.03.08 14:15:

Заметил интересную закономерность. Данный глюк появляется только тогда размер страницы превышает какое-то пороговое значение (примерно 7,8 КБ). Чешу репу....

-~{}~ 26.03.08 14:26:

Походу глюк исправил. Хотя не уверен что это выход.

Когда-то при разработке наткунлся на проблему с индексацией сайта Яндексом. Мол Яша говорил что сервер не отдает дату последнего изменения файла. Вроде как был совет принудительно отдавать хедеры

header("HTTP/1.1 200 OK");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");

Ну, сказано-сделано. Я и забыл о них.

Видимо это и было причиной. Хотя почему, пока не разобрался. И с какого перепоя он два раза chunked кодирует...
 

dr-sm

Новичок
если там nginx, то он не умеет ходить к бекенду по HTTP 1.1, отсюда глюки с чанкед возникают.
 

kruglov

Новичок
Вообще, выдавать текущую дату в качестве даты модификации вещь гораздо более дурацкая, чем отсутствие вывода даты вообще.

Вы мне напомнили одного клиента, от которого требовали логотип в кривых, он прислал в BMP где-то 100x100. Когда же он спросил, кто такие "кривые", ему сказали "к примеру, Corel". "Нет проблем", сказал он, и прислал корел-файл. Со вставленным внутрь BMP-шником.
 

akxxiv

Новичок
dr-sm
Т.е. 200-тый вообще выдавать не стоит?

kruglov
Пожалуй я соглашусь с Вами. Но в тот момент так сделать рекомендовали собственно на этом форуме. Я так и поступил ))

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

dr-sm

Новичок
akxxiv, 200й так:
header("HTTP/1.0 200 OK");

-~{}~ 26.03.08 15:34:

точнее так:
header("$_SERVER['SERVER_PROTOCOL'] 200 OK");
:D
 

fixxxer

К.О.
Партнер клуба
header("HTTP/1.1 200 OK");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");

это лучший способ спуститься в результатах поиска ниже всех, кто скопировал твой контент ;)
 

dr-sm

Новичок
судя по response headers, nginx не пропускает last-modified для динамики :)
 

kruglov

Новичок
fixxxer
Ну, вообще говоря, не факт...

На нынешних динамических сайтах уже непонятно, что говорит last modified. Добавили новый баннер в баннерную систему - надо ли менять last modified? А если добавили новую новость? Повесили счетчик?

Так что остается только функция управления кэшированием.

dr-sm
Пропускает, до того, как на сабжевом сайте убрали last modified, в заголовках он был.
 
Сверху