Инспектор запросов и декодирование
Детальная инспекция запросов и декодирование тел через конвейер декодирования.
Любую захваченную пару запрос/ответ можно открыть в инспекторе запросов — полноэкранном диалоге для изучения метода, цели, заголовков и тел. Непрозрачные тела — base64-блобы, gzip-payload’ы, MessagePack, protobuf или вендор-специфичные кодировки — делаются читаемыми с помощью конвейеров декодирования: упорядоченных списков стадий преобразования, применяемых одна за другой, пока тело не станет читаемым.
Открытие инспектора запросов
Щёлкните по любой строке запроса в каталоге маршрутов рабочей области API, в результатах глобального поиска или в анализе сигнатур (см. /docs/ru/api-re/). Инспектор открывается со следующими элементами:
- Шапка с бейджем метода, хостом, путём, строкой запроса и бейджем статуса ответа.
- Полоса метрик: Capture (имя сессии), Frame (пакетные кадры
f<req>->f<res>), Protocol, Stream (tcp N / h2 M), Duration и размеры Body (req X / res Y). - Стрелки «назад/вперёд» со счётчиком
n/totalдля перемещения по списку результатов без закрытия диалога. - Действия: Bookmark, копирование URL запроса, Baseline/Candidate (установка якоря сравнения), TLS (открытие связанного отпечатка ClientHello) и Minimize (открытие минимизатора запросов).
Основная часть диалога — представление обмена с вкладками. Для переключения вкладок нажимайте цифровые клавиши:
| Клавиша | Вкладка |
|---|---|
| 1 | URL |
| 2 | Query params |
| 3 | Request headers |
| 4 | Response headers |
| 5 | Request body |
| 6 | Response body |
| 7 | Protocol settings |
| 8 | TLS |
Заголовки с учётными данными и конфиденциальные значения в URL по умолчанию маскируются. Действие копирования помечено как Copy redacted request URL, пока вы явно не раскроете секреты; Copy as cURL и Copy Wireshark filter находятся в том же меню.
Декодирование тела вручную
Каждая панель тела (запроса и ответа) имеет три элемента управления: селектор Decode, селектор Type (синтаксис) и переключатель Beautify. Режим декодирования по умолчанию — route: применяется сохранённый конвейер маршрута, если он есть. Выбор любого другого режима — это ручное переопределение одной стадией.
Доступные режимы декодирования:
| Группа | Режимы |
|---|---|
| Raw | raw, route (правило маршрута) |
| Encodings | base64, base64url, base32, hex, url, quoted-printable, ascii85, utf16le, utf16be |
| Compression | gzip, deflate, zlib |
| Structured / binary | msgpack, cbor, bson, protobuf, jwt |
| Text transforms | rot13, groupib (декодирование пакетов Group-IB) |
| Encode (outbound) | encode-base64, encode-hex, encode-url, groupib-encode |
Селектор Type управляет подсветкой синтаксиса и форматированием: text, json, xml, html, javascript, css, yaml, toml, graphql, form, csv, binary (hex-дамп).
Когда режим декодирования — raw, инспектор автоматически распознаёт распространённые форматы и применяет их, если вы вручную не переопределили панель: magic-байты gzip, эвристики MessagePack/CBOR/BSON/protobuf, текст в форме JWT и закодированные payload’ы (base64, base64url, base32, hex, quoted-printable, Ascii85, percent-encoding, rot13 и пакеты Group-IB, начинающиеся с 004/MDA0). Успешное распознавание также устанавливает режим синтаксиса и включает Beautify.
Как работают конвейеры декодирования
Конвейер декодирования — это два упорядоченных списка стадий (один для запросов, один для ответов), привязанных к маршруту. Стадии выполняются последовательно; бинарный вывод одной стадии (например, распакованные gzip-байты) передаётся на следующую стадию как байты, а не как текст с потерями, поэтому работают цепочки вроде base64 → gzip → json.
Разрешение маршрута для режима route:
- Точный ключ эндпоинта —
METHOD:host/pathTemplate, напримерPOST:api.example.com:/v1/events. - Шаблон маршрута — конвейеры, у которых совпадают хост и метод, а шаблон пути совпадает посегментно (
{id}соответствует любому одиночному сегменту). Кандидаты сортируются по специфичности шаблона, затем по времени последнего обновления.
Помимо встроенных режимов выше, стадия может быть script:<id> — изолированной пользовательской JavaScript-функцией декодирования (см. /docs/ru/collector/). Стадия protobuf использует привязанную к эндпоинту protobuf-схему, если она существует (включая покадровое декодирование gRPC-стримов), а конвейер может ссылаться на protobuf-схему напрямую. Конвейер не может содержать стадию route — правила маршрута не рекурсивны.
Каждое декодирование несёт информацию о происхождении: источник (raw, manual или route-rule), каждый применённый шаг с его режимом и длинами входа/выхода в байтах, а также использованную схему. Ошибки декодирования никогда не включают содержимое тела и обрезаются до 300 символов.
[!NOTE] Обрезанные захваченные тела декодируются по мере возможности, но декодирование protobuf по схеме на обрезанном вводе отклоняется, поскольку результат был бы недостоверным.
Сборка конвейера в редакторе
- Откройте рабочую область API и разверните маршрут в каталоге.
- В области деталей маршрута найдите панель Decode pipeline.
- В разделе Request или Response используйте селектор Add step, чтобы добавлять стадии. Встроенные режимы перечислены первыми; зарегистрированные пользовательские скрипты появляются под Custom scripts как
script: <name>. - Удаляйте стадию по
×на её бейдже; порядок соответствует порядку добавления. - Следите за живыми панелями Request preview / Response preview, которые прогоняют несохранённый конвейер на первом образцовом попадании маршрута и показывают строку происхождения (
source · stage → stage · schema …). Превью остаются с замаскированными секретами, пока вы их не раскроете. - Нажмите Save для сохранения или Clear для удаления конвейера этого маршрута.
[!TIP] Если существующий конвейер не удаётся загрузить, редактор отключает Save и показывает кнопку Retry, чтобы временная ошибка бэкенда не могла перезаписать рабочую конфигурацию.
Регистрация и персистентность
Сохранённые конвейеры хранятся на сервере в SQLite-таблице decode_pipelines с ключом по endpoint_key (upsert при конфликте) и колонками host, method (в верхнем регистре), path_template (по умолчанию /), request_modes_json, response_modes_json, protobuf_schema_id и меткой времени updated_at в формате RFC 3339. REST-интерфейс:
GET /api/decode-pipelines # list all pipelines
POST /api/decode-pipelines # create or update (upsert by endpointKey)
GET /api/decode-pipelines/{endpointKey}
DELETE /api/decode-pipelines/{endpointKey}
При запуске фронтенд независимо загружает пять реестров — конвейеры декодирования, скрипты декодирования, protobuf-схемы, привязки protobuf и правила route-model. Каждый успешно загруженный ресурс сразу становится доступным; неудавшийся ресурс повторяется при следующей попытке без отбрасывания уже загруженных, а баннер перечисляет ресурсы, которые не удалось получить.
Копирование и экспорт декодированного содержимого
Меню Copy на панели тела предлагает:
| Опция | Результат |
|---|---|
| Raw body | Декодированный текст точно как показан |
| TypeScript interface | Сгенерированный из декодированного JSON (export interface …) |
| JavaScript typedef | JSDoc typedef из декодированного JSON |
| Go struct | type … struct из декодированного JSON |
Опции интерфейса появляются только когда декодированное тело — валидный JSON. На уровне запроса меню копирования инспектора предоставляет (замаскированный или раскрытый) URL запроса, команду cURL и display-фильтр Wireshark для обмена.