Как Facebook подменяет ссылки
24 мая 2012
Наткнулся на занятную особенность Facebook. А именно на то, как он работает со ссылками.
Для проекта потребовалось реализовать систему приглашений. Схема стандартная:
- Генерируем уникальный хеш.
- Подставляем к основному URL.
- Посылаем через сообщение Facebook.
- Получивший сообщение пользователь идёт по ссылке с хешем и видит своё приглашение.
В процессе тестирования вроде-бы простой схемы выяснилось интересное: на шаге №4 пользователь получал сообщение без хеша.
Первое подозрение пало на параметр, передаваемый GET-ом. Сделали частью URL и… не помогло, что сильно удивило и озадачило. Через несколько дней копаний оказалось, что при отправке сообщения:
- Facebook идёт по ссылке в сообщении.
- Парсит страницу и берёт из неё тег
<meta property="og:url" content="http://example.com/content/my-stuff" />
. Хеша для приглашения у нас в этом URL, конечно, не было. - Подменяет ссылку, которая была в сообщении, на ту, что была получена из метатега.
Отсюда выводы:
- При работе с Facebook помните про особые метатеги.
- Никогда не меняйте состояние приложения через
GET
.
Комментарии RSS по email OK
GET-запросы - идемпотентны по рекомендациям стандарта. Нефиг с их помощью менять состояние приложения вообще.
Alinaki, про
GET
я, в общем, как напоминание. У нас там форма с кнопкой.С лайками вроде такая же история. Есть ещё такой инструмент - developers.facebook.com/tools/debug Сейчас не знаю, но раньше тулза показывала как ФБ видит страницу.
С одноклассниками также история у меня была. Нельзя было поделиться юзеру реферальной ссылкой, одноклассники реф вырезали
а meta refresh оно обрабатывает?
Кто оно? Facebook? Не знаю.