Сниппет-генератор для показа разного контента в зависимости от геолокации пользователя. Работает без бэкенда и без базы данных — вся логика на клиенте.
В HTML-элемент вшиваются два варианта контента, оба закодированы (XOR + base64) и нечитаемы в исходнике страницы.
При загрузке loader.v1.js делает один HEAD-запрос на /geo/ru:
- 200 — пользователь за пределами РФ → декодируется и показывается
data-gdeya-intl - 403 / таймаут (1.5 с) — пользователь в РФ → декодируется и показывается
data-gdeya-ru
Геоблокировка /geo/ru для российских IP настраивается на стороне CDN. На origin-сервере лежит пустой файл, который отдаёт 200 всем — CDN перехватывает запрос и возвращает 403 для РФ.
gdeya/
├── index.html # генератор сниппетов (UI)
├── loader.v1.js # клиентский скрипт
├── geo/
│ └── ru # пустой файл-маркер
├── CNAME
└── README.md
<script src="https://gdeya.bolotov.dev/loader.v1.js" defer></script><div data-gdeya-ru="..." data-gdeya-intl="..."></div>Значения атрибутов генерируются на gdeya.bolotov.dev.
Контент кодируется XOR с фиксированным ключом и упаковывается в base64. Ключ вшит в loader.v1.js. Это не криптостойкое шифрование — цель в том, чтобы контент не читался при беглом просмотре исходного кода страницы.
- Origin: GitHub Pages
- CDN: проксирует
gdeya.bolotov.dev, обеспечивает геоблокировку
CORS настраивается на стороне CDN.
git push
CDN подхватывает изменения при следующем cache miss.