Инспектор запросов и декодирование

Детальная инспекция запросов и декодирование тел через конвейер декодирования.

Любую захваченную пару запрос/ответ можно открыть в инспекторе запросов — полноэкранном диалоге для изучения метода, цели, заголовков и тел. Непрозрачные тела — 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 (открытие минимизатора запросов).

Основная часть диалога — представление обмена с вкладками. Для переключения вкладок нажимайте цифровые клавиши:

КлавишаВкладка
1URL
2Query params
3Request headers
4Response headers
5Request body
6Response body
7Protocol settings
8TLS

Заголовки с учётными данными и конфиденциальные значения в URL по умолчанию маскируются. Действие копирования помечено как Copy redacted request URL, пока вы явно не раскроете секреты; Copy as cURL и Copy Wireshark filter находятся в том же меню.

Декодирование тела вручную

Каждая панель тела (запроса и ответа) имеет три элемента управления: селектор Decode, селектор Type (синтаксис) и переключатель Beautify. Режим декодирования по умолчанию — route: применяется сохранённый конвейер маршрута, если он есть. Выбор любого другого режима — это ручное переопределение одной стадией.

Доступные режимы декодирования:

ГруппаРежимы
Rawraw, route (правило маршрута)
Encodingsbase64, base64url, base32, hex, url, quoted-printable, ascii85, utf16le, utf16be
Compressiongzip, deflate, zlib
Structured / binarymsgpack, cbor, bson, protobuf, jwt
Text transformsrot13, 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:

  1. Точный ключ эндпоинтаMETHOD:host/pathTemplate, например POST:api.example.com:/v1/events.
  2. Шаблон маршрута — конвейеры, у которых совпадают хост и метод, а шаблон пути совпадает посегментно ({id} соответствует любому одиночному сегменту). Кандидаты сортируются по специфичности шаблона, затем по времени последнего обновления.

Помимо встроенных режимов выше, стадия может быть script:<id> — изолированной пользовательской JavaScript-функцией декодирования (см. /docs/ru/collector/). Стадия protobuf использует привязанную к эндпоинту protobuf-схему, если она существует (включая покадровое декодирование gRPC-стримов), а конвейер может ссылаться на protobuf-схему напрямую. Конвейер не может содержать стадию route — правила маршрута не рекурсивны.

Каждое декодирование несёт информацию о происхождении: источник (raw, manual или route-rule), каждый применённый шаг с его режимом и длинами входа/выхода в байтах, а также использованную схему. Ошибки декодирования никогда не включают содержимое тела и обрезаются до 300 символов.

[!NOTE] Обрезанные захваченные тела декодируются по мере возможности, но декодирование protobuf по схеме на обрезанном вводе отклоняется, поскольку результат был бы недостоверным.

Сборка конвейера в редакторе

  1. Откройте рабочую область API и разверните маршрут в каталоге.
  2. В области деталей маршрута найдите панель Decode pipeline.
  3. В разделе Request или Response используйте селектор Add step, чтобы добавлять стадии. Встроенные режимы перечислены первыми; зарегистрированные пользовательские скрипты появляются под Custom scripts как script: <name>.
  4. Удаляйте стадию по × на её бейдже; порядок соответствует порядку добавления.
  5. Следите за живыми панелями Request preview / Response preview, которые прогоняют несохранённый конвейер на первом образцовом попадании маршрута и показывают строку происхождения (source · stage → stage · schema …). Превью остаются с замаскированными секретами, пока вы их не раскроете.
  6. Нажмите 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 typedefJSDoc typedef из декодированного JSON
Go structtype … struct из декодированного JSON

Опции интерфейса появляются только когда декодированное тело — валидный JSON. На уровне запроса меню копирования инспектора предоставляет (замаскированный или раскрытый) URL запроса, команду cURL и display-фильтр Wireshark для обмена.

Документация Traffic Jam. Собрано с помощью Hugo.