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

  • Автор темы Автор темы akxxiv
  • Дата начала Дата начала

akxxiv

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

Собственно проблема вот в чем http://www.antcspb.ru/
Может не у всех это проявится, но все же, верстка в ИЕ едет. И дело в том, что сервер всавляет перед доктайпом какие-то цифры. Есть подозрение, что хостер переехал на ngnix, а под ним такие косяки наблюдались. Только не пойму как от них избавиться.
Может кто встречался и справился?
 
Код:
[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>
 
Мда, опять. Я так и не понял как от этого избавится. В том топике решил проблему насильно пересадив сайт на обслуживание Апача. Но там был наш сервант, а здесь хрен знает кто обслуживает, видимо 1gb.
 
Да, в том случае был наш выделенный сервер, на котором можно было все.
В данном случае сервер не наш, я только сайт сделал и залил. После чего он нормально работал пол года, я и забыл про него. А сегодня позвонили )))
 
удивительно, как люди занимаются веб-разработкой не зная протокола http :)
 
Хм, если ваши сайты на разных хостингах глючат одинаково, может, не в Nginxах дело?

Там у вас внутреннего кэширования, когда сайт сам себя по HTTP дергает, нету точно?
 
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:

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

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

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

-~{}~ 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 кодирует...
 
если там nginx, то он не умеет ходить к бекенду по HTTP 1.1, отсюда глюки с чанкед возникают.
 
Вообще, выдавать текущую дату в качестве даты модификации вещь гораздо более дурацкая, чем отсутствие вывода даты вообще.

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

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

Ладно, тогда такой вопрос, какие в таком случае должен отдавать заголовки скрипт чтобы работало и на нгниксе и на апаче корректно? Или предоставить это дело серверу и не вмешиваться в его работу. Надо чтобы в данном случае браузер не кэшировал страницы и не пугал Яшу.
 
akxxiv, 200й так:
header("HTTP/1.0 200 OK");

-~{}~ 26.03.08 15:34:

точнее так:
header("$_SERVER['SERVER_PROTOCOL'] 200 OK");
:D
 
header("HTTP/1.1 200 OK");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");

это лучший способ спуститься в результатах поиска ниже всех, кто скопировал твой контент ;)
 
судя по response headers, nginx не пропускает last-modified для динамики :)
 
fixxxer
Ну, вообще говоря, не факт...

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

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

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