Управление и учет

Обязательные заголовки

Принудительная проверка наличия указанных HTTP-заголовков в каждом запросе через governance.

Обзор

Обязательные заголовки позволяют гарантировать наличие конкретных HTTP-заголовков в каждом LLM- и MCP-запросе, проходящем через Meridian. Если в запросе нет хотя бы одного из обязательных заголовков, плагин governance отклоняет его с ошибкой 400 Bad Request, не доводя до провайдера.

Это полезно для:

  • Изоляции тенантов — требовать X-Tenant-ID, идентифицирующий вызывающего тенанта.
  • Аудит-трейлов — требовать X-Correlation-ID для сквозной трассировки запросов между сервисами.
  • Кастомных метаданных маршрутизации — требовать заголовки, от которых зависит ваша инфраструктура.

Проверка обязательных заголовков требует включённого governance. Проверка выполняется в PreLLMHook и PreMCPHook, поэтому распространяется на все inference-запросы и вызовы MCP-инструментов.

Сопоставление имени заголовка регистронезависимо — настройка X-Tenant-ID совпадёт с x-tenant-id, X-TENANT-ID и любой другой записью.


Как это работает

Да

Нет

Запрос

Все обязательные
заголовки на месте?

Переход к проверке
governance

400 Bad Request
missing_required_headers

Когда приходит запрос:

  1. Middleware HTTP-транспорта сохраняет все заголовки запроса в context Meridian (с ключами в нижнем регистре).
  2. Хуки PreLLMHook / PreMCPHook плагина governance проверяют наличие каждого обязательного заголовка.
  3. Если хотя бы один отсутствует, запрос немедленно отклоняется со статусом 400 и JSON-ошибкой со списком недостающих заголовков.

Пример ответа с ошибкой:

{
  "error": {
    "message": "missing required headers: x-tenant-id, x-correlation-id",
    "type": "missing_required_headers"
  }
}

Конфигурация

  1. Перейдите в ConfigSecurity Settings.
  2. Убедитесь, что Governance включён (раздел обязательных заголовков отображается только при активном governance).
  3. Прокрутите до раздела Required Headers.
Настройка Required Headers
  1. Введите список имён заголовков через запятую (например, X-Tenant-ID, X-Correlation-ID).
  2. Нажмите Save Changes.

Изменения вступают в силу немедленно — перезапуск не требуется.

Передавайте required_headers в client_config при обновлении конфигурации:

curl -X PUT http://localhost:8080/api/config \
  -H "Content-Type: application/json" \
  -d '{
    "client_config": {
      "required_headers": ["X-Tenant-ID", "X-Correlation-ID"]
    }
  }'

Чтобы очистить список обязательных заголовков, передайте пустой массив:

curl -X PUT http://localhost:8080/api/config \
  -H "Content-Type: application/json" \
  -d '{
    "client_config": {
      "required_headers": []
    }
  }'

Добавьте required_headers в секцию client:

{
  "client": {
    "required_headers": ["X-Tenant-ID", "X-Correlation-ID"]
  }
}
ПолеТипОбязательноеОписание
required_headersstring[]НетСписок имён заголовков, которые должны присутствовать в каждом запросе. Регистронезависимо.

Примеры

Обязательный заголовок тенанта

Настройка одного обязательного заголовка для идентификации тенанта:

{
  "client": {
    "required_headers": ["X-Tenant-ID"]
  }
}

Корректный запрос:

curl http://localhost:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "X-Tenant-ID: tenant-123" \
  -d '{"model": "gpt-4o", "messages": [{"role": "user", "content": "Hello"}]}'

Отклонённый запрос (нет заголовка):

curl http://localhost:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model": "gpt-4o", "messages": [{"role": "user", "content": "Hello"}]}'
# → 400: missing required headers: x-tenant-id

Совмещение с виртуальными ключами

Обязательные заголовки работают вместе с принудительной проверкой виртуальных ключей. Если настроены обе проверки, плагин governance сначала проверяет обязательные заголовки, затем валидирует виртуальный ключ:

{
  "client": {
    "enforce_auth_on_inference": true,
    "required_headers": ["X-Tenant-ID"]
  }
}

В таком запросе должны присутствовать и заголовок виртуального ключа, и X-Tenant-ID, чтобы пройти governance.


Дальнейшие шаги

Содержание