Назад к блогу

Заголовок Sec-GPC теперь есть везде: серверное определение для аналитики

Global Privacy Control передаётся как заголовок запроса Sec-GPC в каждом запросе. Разбираем, как читать его на edge и соблюдать в аналитике без cookie.

Global Privacy Control (GPC) чаще всего обсуждают как юридический сигнал, но для инженера это прежде всего HTTP-заголовок. Каждый запрос из браузера или расширения с включённым GPC несёт Sec-GPC: 1, а та же настройка доступна клиентскому JavaScript как navigator.globalPrivacyControl. Если вы запускаете аналитику на edge, заголовок — самая чистая точка интеграции: на него можно отреагировать до того, как выполнится любая логика измерений, и не отдавать при этом ни байта отслеживающего кода.

Как на самом деле выглядит сигнал

Спецификация GPC определяет поле заголовка запроса Sec-GPC, единственное осмысленное значение которого — 1; оно означает, что пользователь не согласен на продажу или передачу своих персональных данных. Отсутствие заголовка означает, что предпочтение не выражено, — и это явно не то же самое, что положительный 0. Спецификация также определяет well-known ресурс по адресу /.well-known/gpc.json, который сайт публикует, чтобы заявить, что соблюдает этот сигнал.

Поскольку Sec-GPC использует префикс Sec-, это запрещённое имя заголовка: его нельзя задать или переопределить через fetch() или XMLHttpRequest, поэтому подделать его из скриптов страницы сложнее, чем произвольный собственный заголовок. Он отправляется и при навигации, и в запросах подресурсов, так что edge-воркер видит его уже на самом первом обращении.

Чтение заголовка на edge Cloudflare

В Cloudflare Worker проверка занимает одну строку и выполняется до того, как вы решите, записывать ли что-либо:

export default {
  async fetch(request) {
    const gpc = request.headers.get('Sec-GPC') === '1';
    // gpc === true -> пользователь отказался от продажи/передачи данных
    // соответственно записывайте только безопасные для приватности агрегаты
    return handle(request, { gpc });
  }
};

Для Monoid это напрямую ложится на то, как продукт уже устроен. Monoid не хранит cookie и localStorage, не выводит отпечаток браузера, поэтому кросс-сайтового профиля, который нужно было бы подавлять, попросту не существует. GPC — это юридический отказ от продажи и передачи персональных данных, то есть от поведения, в которое privacy-first дизайн без cookie никогда не вовлекается. Поэтому определение Sec-GPC становится мерой глубинной защиты и проверяемой записью о том, что предпочтение было учтено, а не переключателем, меняющим состав данных, покидающих браузер.

Почему это важно юридически — коротко

Применимость GPC не теоретическая. Мировое соглашение генерального прокурора Калифорнии с Sephora в 2022 году ясно показало: CCPA требует, чтобы компании считали GPC действительным отказом от продажи, а нормативные акты California Privacy Rights Act требуют соблюдать сигналы предпочтения об отказе. Колорадо и другие штаты США приняли сопоставимые требования к универсальным механизмам отказа. Чтение заголовка на сервере даёт детерминированную, фиксируемую в логах точку, где происходит соблюдение требований, — куда надёжнее, чем полагаться на срабатывание правила в тег-менеджере.

Публикация well-known ресурса

Если вы соблюдаете GPC, заявите об этом. Отдавайте /.well-known/gpc.json с небольшим документом:

{ "gpc": true, "lastUpdate": "2026-07-19" }

Это статический файл, который можно вернуть из edge-маршрута с Content-Type: application/json. Он сообщает браузерам, расширениям и аудиторам, что предпочтение уважается, и ничего не стоит в поддержке.

Практические рекомендации для аналитических конвейеров

  • Проверяйте заголовок до измерения, а не после. Действие на edge означает, что решение принимается прежде любой последующей обработки.
  • Не считайте отсутствие согласием. Нет заголовка Sec-GPC — значит, предпочтение просто не выражено; учитывайте это вместе с имеющимся правовым основанием.
  • Ведите минимальный аудиторский след. Запись того, что запрос содержал Sec-GPC: 1, — без привязки к идентификатору — демонстрирует добросовестность и не создаёт профиль.
  • Для блокировки предпочитайте заголовок, а не JS-API. Свойство navigator.globalPrivacyControl полезно для клиентского интерфейса, но заголовок позволяет решить всё до запуска кода.

Более общий вывод: сигналы приватности всё чаще становятся фактами транспортного уровня, а не особенностями приложения. Sec-GPC стоит рядом с DNT (устаревшим), заголовком Permissions-Policy и Referrer-Policy — тем, что аналитическая система должна читать, а не игнорировать. Для продукта без cookie изменение невелико именно потому, что архитектура уже минимизирует данные, — а в этом и весь смысл такого подхода.

Sources

Comments

Loading comments…