суббота, 19 января 2008 г.

ping, pingback, trackback в wordpress- взгляд изнутри: что это такое и как оно работает

Наконец таки, после нескольких дней настройки wordpress и плагинов к нему, я могу приступить к вкусному - xml-rpc и удаленный вызов процедур в Интернете. В первую очередь хотелось разобраться с пингами и трекбэками. До знакомства с wordpress я не подозревал о их существовании. Когда я настраивал свой первый блог на wordpress Лавка снов, я как сомнамбула делал необходимые настройки в панели управления - добавил pings.txt - список сайтов для пинга (74 сайта в текстовом файле для скачивания)
в панели управления / настройки / написание. Я тогда доверился утверждению, что это очень хорошо для блога.
Так что же такое ping? Запрос в гугле дает такие ссылки как: Что такое ping и traсkbaсk? - на сайте уважаемого макса, чьей русификацией wordpress я пользуюсь. Прочитав статью в голове немного прояснилось, но вот полного понимания не наступило. Такое понимание у меня может наступить только при детальном ознакомлении оригинальной документации или исходников, реализующих это. Ничтоже сумнятеже я полез в исходник wordpress - файл xmlrpc.php, ссылку на который, кстати говоря, wordpress вставляет в заголовок серверного ответа всех страниц блога. Пролистав до секции функций с пингами (PingBack functions), в комментариях обнаруживаю ссылку на www.hixie.ch/specs/pingback/pingback. естественно иду по ссылке, где оказывается, что существует куча версий этих самых пингбеков - но мне то все они зачем? Хватит самой последней версии 1.0
И первым делом читаю в абстрактном предисловии, что такое ping и pingback:
pingback это метод для вэбмастера уведомить его о новых ссылках на его страницы. Обычно это делают программы на web серверах - в вольном переводе, ну скажите как перевести “web publishing software”? Что собственно не проясняет ситуацию. Авторы документации это понимают и поэтому сразу приводят пример работы пингов. Перескажу его своими словами:
Алиса написала в свой блог, Боб прочитал ее статью и написал у себя заметку про ее статью, указав ссылку на статью Алисы. Движок блога у Боба автоматически информирует блог Алисы о ссылке на ее статью на блоге Боба. Движок блога Алисы может поместить в комментариях ссылку на заметку у Боба. в Общем получается круговая порука. Стоит сразу заметить, что такая система открыта для спама, как впрочем и помогает поисковым роботам найти на вашем блоге новую статью.
Итак перейду к техническим подробностям. Механизм пингбеков использует http заголовок или элемент <link> в одиночных xml-rpc вызовах для информирования. Ресурсы, которые поддерживают механизм pingback должны отдавать в заголовках X-Pingback с полным адресом сервера или (можно и оба) в самом html документе элемент <link>. Пример в секции head html документа: <link rel=”pingback” href=”pingback server” />. Понятно, что урлы должны совпадать в обоих случаях и проще использовать серверный ответ, так как парсить html документ еще та задача. xml-rpc клиент, если находит X-Pingback в ответе, то он должен его использовать, иначе искать среди html документа адрес для пинга. В документации указано регулярное выражение для поиска необходимого урла в html:
<link rel=”pingback” href=”([^”]+)” ?/?>
После того как найден урл xml-rpc сервера для пинга, клиент вызывает на сервере функцию с названием “pingback.pin” с двумя параметрами -абсолютные адреса страницы, на которой находится ссылка и адрес самой ссылки. Функция с сервера возвращает строку в случае успеха. Конкретно xml-rpc сервер wordpress возвращает следующее:
sprintf(__(’Pingback from %1$s to %2$s registered. Keep the web talking! :-)’), $pagelinkedfrom, $pagelinkedto);
в случае ошибки - соответствующий fault код и комментарий к нему. xml-rpc клиент может что угодно делать с ответом xml-rpc сервера, например использовать ответ для отладки. Естественно xml-rpc сервер проверяет урлы - а туда ли они попали. Wordpress также выцепляет участок текста возле пингуемого урла и вставляет выцепленный текст в виде комментария.
Одно непонятно мне осталось - а где же trackback? В оригинальной документации используется слово pingback, а слова trackback отсутствует. Стал копать исходники и ддоку wordpress и относительно быстро нарыл следующее: pingback и trackback имеют мало общего, кроме слова back. Если ping, pingback - это одно и тоже, что выполняют xml-rpc клиент и сервер, то trackback это всего лишь одиночный html запрос, в котором методом post передаются данные о новой записи в wordpress. Пинг - он интеллектуален: проверяет кучу всего, запрашивает и получает ответы. Трекбэк прост и груб как обыкновенный запрос методом пост - трекбэк не интересует ответ, он всего лишь информирует, а уж что там будет с запросом его вовсе не интересует. Одним словом забейте на трекбэки - ничего интересного в нем нет.
Wordpress имеет еще одну интересную функцию доступную по протоколу xml-rpc - “pingback.extensions.getPingbacks”. Эта функция возвращает список всех удачно пропингованных урлов - их wordpress сам вставил в виде комментариев. Есть и еще одна xml-rpc функция - “mt.getTrackbackPings”. Она возвращает список трекбэков к записи, думаю не актуальна из за самого трекбэка.

Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

Комментариев нет: