Наткнулся на занятную особенность Facebook. А именно на то, как он работает со ссылками.
Для проекта потребовалось реализовать систему приглашений. Схема стандартная:
- Генерируем уникальный хеш.
- Подставляем к основному URL.
- Посылаем через сообщение Facebook.
- Получивший сообщение пользователь идёт по ссылке с хешем и видит своё приглашение.
В процессе тестирования вроде-бы простой схемы выяснилось интересное: на шаге №4 пользователь получал сообщение без хеша.
Первое подозрение пало на параметр, передаваемый GET-ом. Сделали частью URL и… не помогло, что сильно удивило и озадачило. Через несколько дней копаний оказалось, что при отправке сообщения:
- Facebook идёт по ссылке в сообщении.
- Парсит страницу и берёт из неё тег
<meta property="og:url" content="http://example.com/content/my-stuff" />
. Хеша для приглашения у нас в этом URL, конечно, не было. - Подменяет ссылку, которая была в сообщении, на ту, что была получена из метатега.
Отсюда выводы:
- При работе с Facebook помните про особые метатеги.
- Никогда не меняйте состояние приложения через
GET
.