Раздача файлов со своего домена
Как скопировать версионные файлы трекера на свой origin, проверить контрольные суммы, настроить кэширование и политику безопасности и не сломать загрузку дополнительных модулей.
На этой странице
В этом режиме весь исполняемый код отдаёте вы со своего домена. Наружу уходят только данные событий.
Кому это нужно
- Политика безопасности запрещает сторонние origin в
script-src. - Требуется контролировать момент обновления версии трекера самостоятельно.
- Внутренние правила требуют, чтобы весь исполняемый код проходил вашу проверку перед выкладкой.
Если ничего из этого не про вас — обычный тег скрипта проще в сопровождении.
Шаг 1. Скопируйте файлы версии
Нужны пять файлов: манифест и все четыре модуля одной версии.
VERSION=0.6.0
SRC=https://YOUR_ACTIONPULSE_HOST/v1/sdk/browser/$VERSION
DST=public/vendor/actionpulse/v1/sdk/browser/$VERSION
mkdir -p "$DST"
curl --fail --silent --show-error "$SRC/manifest.json" -o "$DST/manifest.json"
curl --fail --silent --show-error "$SRC/tracker.js" -o "$DST/tracker.js"
curl --fail --silent --show-error "$SRC/replay.js" -o "$DST/replay.js"
curl --fail --silent --show-error "$SRC/diagnostics.js" -o "$DST/diagnostics.js"
curl --fail --silent --show-error "$SRC/picker.js" -o "$DST/picker.js"
Шаг 2. Сверьте контрольные суммы
До выкладки сверьте SHA-384 каждого файла со значением assets.*.sha384 из
манифеста:
DST=public/vendor/actionpulse/v1/sdk/browser/0.6.0
for name in tracker replay diagnostics picker; do
key=$name
[ "$name" = "tracker" ] && key=core
expected=$(python3 -c "import json,sys;print(json.load(open('$DST/manifest.json'))['assets']['$key']['sha384'])")
actual=$(openssl dgst -sha384 "$DST/$name.js" | awk '{print $NF}')
[ "$expected" = "$actual" ] && echo "ok $name" || echo "FAIL $name"
done
Любое FAIL — повод остановить выкладку, а не «перекачать и посмотреть».
Шаг 3. Сохраните структуру каталогов
Имена файлов и путь v1/sdk/browser/<версия>/ менять нельзя. Префикс перед
ними выбираете вы, но внутри структура фиксирована.
Ядро ищет свои модули относительно собственного адреса и делает это только
тогда, когда путь заканчивается на /sdk/browser/<версия>/tracker.js. Стоит
переименовать файл или «уплостить» каталог — и модули начнут запрашиваться с
корня вашего домена, где их нет.
Шаг 4. Подключите тег
<script
src="/vendor/actionpulse/v1/sdk/browser/0.6.0/tracker.js"
integrity="SRI_FROM_MANIFEST"
crossorigin="anonymous"
data-api-host="https://YOUR_ACTIONPULSE_HOST"
data-token="YOUR_BROWSER_TOKEN"
data-consent="required"
></script>
data-api-host здесь обязателен: файл отдаёте вы, а события должны уходить в
ActionPulse. Значение integrity возьмите из скопированного манифеста
(assets.core.integrity) — приведённое выше значение является плейсхолдером.
При загрузке с того же origin, что и страница, crossorigin не обязателен, но
и не мешает.
Шаг 5. Настройте раздачу
- Отдавайте байты без изменений. Минификация, перепаковка или преобразования на стороне CDN ломают проверку целостности.
- Кэшируйте версионный каталог надолго:
Cache-Control: public, max-age=31536000, immutable. - Не перезаписывайте содержимое внутри уже опубликованной версии. Обновление — это новый каталог с новым номером версии.
- Оставляйте предыдущую версию доступной, чтобы можно было откатиться.
Политика безопасности контента
script-src 'self';
connect-src 'self' https://YOUR_ACTIONPULSE_HOST;
worker-src 'self' blob:;
worker-src blob: нужен только для записи сессий. Без него записи не
работают, а всё остальное продолжает собираться — симптом будет частичным.
Директиву unsafe-eval добавлять не нужно ни при каких условиях.
Обновление версии
- Скачайте новый манифест и все четыре файла новой версии в новый каталог.
- Сверьте суммы.
- Обновите в теге путь и значение
integrityодной правкой. - Убедитесь, что события идут, и только потом убирайте старый каталог.