Web клиент (расширение для Chrome). Передача GUID клиента.
Добавляет заголовок HTTP 'C' и параметр 'C=<uuid>' к GET-запросам для URL из списка настроек.
Данный UUID можно использовать для дополнительной аутентификации пользователя.
Параметр будет доступен в модуле приложения -> "ПриНачалеРаботыСистемы".
Подробная инструкция и описание работы расширения:
1) Коротко о том, что делает расширение
- При точном совпадении запрашиваемого URL с одним из URL в списке настроек расширение автоматически:
- добавляет заголовок HTTP `C: <uuid>` ко всем исходящим GET-запросам к этому URL;
- добавляет параметр `C=<uuid>` в строку запроса URL (query) при переходах/перенаправлениях к этому же точному URL.
- `<uuid>` — это уникальный UUID, сгенерированный один раз при первой установке расширения и сохранённый в `chrome.storage.local`.
2) Установка (локально, для разработчика)
1. Откройте `chrome://extensions` в браузере Chrome.
2. Включите режим разработчика (Developer mode) в правом верхнем углу.
3. Нажмите "Load unpacked" и выберите папку с этим репозиторием (где находятся `manifest.json`, `background.js`, `content.js`, `options.html` и т.д.).
3) Конфигурация — список URL
- Откройте опции расширения (Details → Extension options или через `chrome-extension://<id>/options.html`).
- В поле вводите полные URL (по одному в строке). Примеры допустимых значений:
- `https://example.com/path/to/page`
- `https://example.com/path/to/page?param=1`
- Важно: сравнение выполняется строго (exact match). Это значит, что URL запроса должен полностью совпадать с записью (схема + хост + путь + query, фрагмент `#...` игнорируется). Если URL отличается даже параметром в query или слэшем — параметр и заголовок не добавляются.
4) Что ещё делает расширение (контроль на странице)
- Content script модифицирует ссылки (`a[href]`) и GET-формы на страницах: если href/action точно равен URL из списка, в ссылку добавляется `?C=<uuid>` и в GET-форму добавляется скрытое поле `input[name="C"]`.
- Для перехвата вызовов `fetch` и `XMLHttpRequest` расширение пытается внедрить скрипт в контекст страницы (через `chrome.scripting.executeScript`) и изменить URL запросов, но это может блокироваться CSP на некоторых сайтах — в этом случае изменения ссылок/форм остаются рабочими.
5) Файлы расширения (кратко)
- `manifest.json` — манифест (Manifest V3), перечислены разрешения `declarativeNetRequest`, `declarativeNetRequestWithHostAccess`, `scripting`, `storage`.
- `background.js` — сервис-воркер: генерация UUID, создание/обновление правил `declarativeNetRequest` (добавление заголовка/редиректа для точных URL), обработка сообщений от content script и опций.
- `content.js` — content script: изменение ссылок/форм, запрос UUID и списка URL из background, запрос инъекции page-script.
- `options.html` — UI для ввода списка URL (по одной строке). Сохраняет в `chrome.storage.local` под ключом `allowedHosts`.
6) Как проверить работу
a) Проверка сохранённых значений (service worker console):
- Откройте `chrome://extensions`, на карточке расширения нажмите "Service worker" → Inspect views.
- В консоли выполните:
- `chrome.storage.local.get(['allowedHosts','userUUID'], console.log)` — увидеть список URL и UUID.
- `chrome.declarativeNetRequest.getDynamicRules().then(r => console.log(r))` — увидеть текущие динамические правила (они должны содержать правила с ключом `C`).
b) Проверка на странице:
- Перейдите по точному URL из опций или кликните по ссылке, которая точно совпадает с записью.
- В DevTools → Network проверьте запрос GET:
- Request URL — должно быть `...?...&C=<uuid>` (если редирект/изменение URL сработал);
- Request Headers — должен быть заголовок `C: <uuid>`.
7) Устранение неполадок
- Если в URL по-прежнему появляется параметр `UserUUID` — это значит, что старые динамические правила (созданные ранее, до переименования в `C`) остались в браузере. Решение:
1. В консоли service worker выполните:
```js
chrome.declarativeNetRequest.getDynamicRules().then(r => console.log(r));
// и если видите правила, содержащие 'UserUUID', удалите их:
chrome.declarativeNetRequest.getDynamicRules().then(r=>{
const ids = r.filter(rule=> JSON.stringify(rule).includes('UserUUID')).map(x=>x.id);
if(ids.length) chrome.declarativeNetRequest.updateDynamicRules({removeRuleIds: ids});
console.log('removed', ids);
});
```
2. Затем перезапустите расширение (Reload на `chrome://extensions`) или отправьте сообщение для переустановки правил:
`chrome.runtime.sendMessage({ type: 'hosts-changed' });`
- Если опции не сохраняются: откройте DevTools на странице `options.html` и посмотрите ошибки в консоли — возможна проблема с `chrome.storage` или правами.
- Если injected скрипт не перехватывает `fetch`/`XHR` — вероятно сайт использует строгую CSP, и инъекция блокируется; в этом случае изменение ссылок/форм остаётся основным механизмом.
8) Изменение параметра/названия заголовка
- По умолчанию имя заголовка и параметра — `C`. Если нужно изменить имя или способ формирования значения (например, брать UUID из внешнего сервера), нужно править `background.js` и `content.js`.
9) Безопасность и ограничения
- dNR (declarativeNetRequest) имеет ограничение на количество правил; расширение создаёт правила на точные URL из настроек — при большом количестве записей это может упереться в лимит.
- Расширение не отправляет UUID никуда — оно хранит UUID локально и использует его только для установки заголовка/параметра.
Репозиторий на GitHub: https://github.com/Shooshpanius/Chrome1cAddGuidToGET
Вступайте в нашу телеграмм-группу Инфостарт