Кратко

  • href задаёт адрес перехода, а ping может перечислять другие адреса, куда браузер отправит отдельный POST при переходе по ссылке.
  • Сторонники идеи хотели показывать настоящее назначение ссылки, обходясь без скрывающего его переадресующего сервера. Спор упёрся в то, увидит ли человек дополнительное уведомление.

На двери написан адрес. Вы толкаете её и оказываетесь именно там. Пока дверь закрывается за спиной, звонок раздаётся в соседнем доме. Так работает возможный сценарий для HTML-атрибута ping: ссылка ведёт по адресу из href, а браузер может послать короткое уведомление по дополнительному адресу. Для читателя это один щелчок; для сети — два разных поручения.

В переписке WHATWG за октябрь 2005 года обсуждали уже не только способ отправки, но и право человека отключить уведомления, выборочно исключить адреса и узнать о дополнительных запросах. Последний пункт был самым человеческим. В исходном коде адрес можно прочесть. На обычной странице пользователь видит ссылку и ждёт перехода. Между этими двумя формами видимости — целая история браузерного интерфейса.

В январе 2006 года Тайлер Клоуз изложил довод в пользу ping. Сайты и так могли считать переходы наружу, проводя посетителя через собственный сервер-переадресатор. Видимый адрес тогда скрывал конечную точку; скопированная ссылка сохраняла лишний крюк. Разнести две функции по разным атрибутам казалось честнее: реальная цель в href, место учёта в ping. Проект выглядел аккуратным, словно табличка «выход» перестала вести через бухгалтерию.

Действующий HTML Standard описывает устройство с точностью до байта. В ping можно перечислить HTTP- или HTTPS-адреса через пробел. При переходе браузер способен отправить на каждый разрешённый адрес отдельный POST с телом PING — четыре байта типа text/ping. Тело ответа ему не нужно. Настройки пользователя могут заставить браузер пропустить часть адресов или все сразу. Автор страницы расставляет звонки, браузер решает, каким дать голос.

Четыре байта выглядят скромно, но получатель узнаёт о самом запросе. Алгоритм предусматривает также заголовки Ping-To и, при определённых условиях, Ping-From. Важна не длина сообщения, а то, кому становится известен выбор читателя. Вопрос о контроле оказывается вопросом об интерфейсе: увидит ли человек второй адрес и поймёт ли, как отказаться от отправки?

Борис Збарски в ноябре 2007 года объяснил, почему это трудно. Можно вывести предупреждение в строке состояния, но многие туда не смотрят. Он предположил, что обычный режим, возможно, обойдётся без заметного знака. Это была оценка своего времени. Её суть проста и сейчас: вывеска над служебной дверью не предупреждает посетителя у главного входа.

Документы о стандарте прошли через спор. 4 марта 2010 года председатель рабочей группы HTML в W3C сообщил, что согласованное предложение убрать <a ping> из её проекта HTML5 принято. Письмо допускало возвращение идеи позднее. В рабочем проекте W3C от 2018 года описание проверки переходов снова присутствовало. При этом авторы проекта прямо отмечали: на тот момент им не был известен браузер с интерфейсом, позволяющим управлять такой проверкой или хотя бы узнавать о ней. Обещание прозрачности в тексте уже было; нужной ручки на панели ещё не находилось.

Живой стандарт WHATWG сохраняет ping и допускает показ адресов уведомления пользователю. История этого атрибута сводится к распределению ролей. Страница назначает адресатов, браузер отправляет или не отправляет запросы, читатель решает, куда перейти, опираясь на видимое. Настоящая цель в ссылке исправляет хитрость с обходным адресом. Остаётся обозначить второй звонок там, где человек действительно принимает решение.