Личные и прямые подключения из браузера

Поможем настроить прямое подключение Open WebUI из браузера, проверить список моделей и ответ, разобраться с CORS и сохранением API-ключа в v0.12.3.

После урока вы сможете

  • Различать личную настройку и браузерный маршрут запроса
  • Понимать, где сохраняются настройки и API-ключ в v0.12.3
  • Проверять каталог моделей и законченный ответ по отдельности
  • Различать сетевую доступность, CORS и права модели

Проверяемый результат: При подготовленном API личное подключение сохранено и проверено отдельным текстовым запросом. Вы понимаете маршрут запроса и условия хранения ключа.

Представим небольшую учебную задачу: участнику книжного клуба нужно сократить несекретное объявление о встрече до двух предложений, сохранив время, место и условия участия. Общий чат в Open WebUI уже работает, но для этой пробы человеку предоставили отдельный подготовленный доступ к модели, который не нужно добавлять в общие административные настройки сервера.

Для такой пробы подойдёт личное прямое подключение (Direct Connections в документации Open WebUI). Разберём, чем запрос из браузера отличается от серверного вызова и где сохраняется ключ в проверенной версии v0.12.3. Затем проверим условия доступа, добавим подключение и попробуем сократить объявление.

Кто отправляет запрос и где сохраняются личные настройки

Когда вы используете обычное OpenAI-совместимое подключение, настроенное администратором, браузер передаёт сообщение серверу Open WebUI, а его серверная часть (backend) обращается к внешнему API модели. В режиме Direct Connections основной запрос OpenAI Chat Completions к API модели отправляет сам браузер (реализация браузерного вызова в v0.12.3).

Это по-прежнему обычный текстовый диалог, а не новая разновидность модели или агент. В документации возможность помечена как экспериментальная. Прямой вызов зависит от работающего браузерного сеанса: пока модель формирует ответ, оставьте вкладку открытой. Сервер Open WebUI тоже участвует в передаче полученных частей ответа (передача ответа в v0.12.3).

Браузерный маршрут запроса не определяет, где хранится ключ. В проверенной стабильной версии Open WebUI v0.12.3 личное соединение вместе с ключом сохраняется и на сервере (сохранение личного соединения и приём настроек сервером). Документация обещает хранение ключа только в браузере, но код этого релиза сохраняет его на сервере вместе с пользовательскими настройками. Это результат чтения исходников на 2026-10-17, а не проверки работающей установки.

Поэтому «личное» (personal) означает настройку вашей учётной записи. Это не гарантия хранения ключа только в одном браузере или на одном компьютере. Прямой вызов также не отменяет историю чатов и серверные служебные этапы Open WebUI и не меняет правила тарификации API.

Что должно быть готово до ввода адреса и ключа

Вводите ключ только в доверенный экземпляр Open WebUI. Прежде чем открывать настройки, проверим, что для упражнения всё готово:

  • Разрешение на стороне Open WebUI. Администратор уже включил возможность прямых подключений в Settings → Admin → Connections (переключатель Direct Connections в панели администратора). Это настройка моделей; отдельные права на прямые серверы инструментов (Tools) для нашего текстового примера не нужны.
  • Готовый HTTPS API, совместимый с OpenAI Chat Completions. Адрес должен быть доступен с вашего устройства и принимать запросы каталога и генерации.
  • Точный базовый адрес (Base URL) и фактический идентификатор модели (Model ID). Берите адрес в том виде, в каком его выдал оператор API. Суффикс /v1 встречается часто, но дописывать его наугад не нужно.
  • Разрешение CORS для источника (origin) вашего Open WebUI. Если страница веб-интерфейса и API модели находятся на разных адресах, браузер применяет правила межисточниковых запросов CORS. Владелец API модели должен заранее разрешить origin вашей страницы Open WebUI, то есть точное сочетание схемы, хоста и порта (например, https://chat.example.org). Настройки самого Open WebUI не могут выдать такое разрешение за чужой API-сервер.
  • Ограниченный временный ключ (API Key) и понятный лимит расходов. Для упражнения нужен отдельно выданный короткоживущий ключ с доступом к нужной модели и согласованным бюджетом у оператора API. Учитывайте и фоновые модели и дополнительные расходы: генерация заголовков и тегов после ответа остаётся задачей сервера и может вызывать дополнительные обращения к модели.

В личном прямом подключении адрес localhost или 127.0.0.1 всегда указывает на то устройство, где открыт ваш браузер, а не на сервер или Docker-контейнер Open WebUI. Внутреннее имя контейнера или адрес закрытой серверной сети могут работать в административном подключении, но быть недоступны с вашего ноутбука. Если Open WebUI открыт по https://, браузер может заблокировать обращение к незащищённому http:// адресу как смешанное содержимое (mixed content). Для loopback-адресов вроде 127.0.0.1 существуют исключения, а к локальной сети могут применяться отдельные ограничения, зависящие от браузера и версии.

Если подготовленного HTTPS-адреса с настроенным CORS или временного ключа сейчас нет, не ослабляйте защиту браузера и не пытайтесь настраивать прокси на ходу. Пока сократите объявление через уже знакомое административное подключение.

Добавим личное подключение и проверим каталог моделей

Если всё готово, добавим источник в личных настройках. В версии v0.12.3 поля Connection Type и API Type здесь скрыты (поля личного соединения в v0.12.3), поэтому выбирать тип соединения или протокола вручную не придётся.

  1. Откройте личные настройки пользователя Settings → Connections (это пользовательское меню настроек, а не панель Admin).
  2. Нажмите кнопку добавления соединения (Add Connection) и проверьте, что переключатель активности нового подключения включён.
  3. В поле URL вставьте точный базовый адрес подготовленного API, полученный от оператора.
  4. В блоке авторизации оставьте выбранный по умолчанию вариант Bearer и вставьте временный ключ только в предназначенное для него поле API Key. Не сохраняйте ключ в заметках чата и не передавайте его в тексте запросов.
  5. Поле Model IDs оставьте пустым. Так браузер запросит каталог у указанного API. Ручной идентификатор создал бы запись без обращения к каталогу и сам по себе не подтвердил бы связь с сервером модели.
  6. Нажмите кнопку проверки соединения (Verify Connection). Браузер отправит запрос GET <Base URL>/models с ключом в заголовке Authorization: Bearer … (проверка соединения и запрос /models в v0.12.3). Дождитесь подтверждения, что проверка прошла без ошибки.
  7. Нажмите Save в окне соединения, а затем сохраните изменения в разделе настроек.
  8. Сразу после сохранения заново откройте Settings → Connections и убедитесь, что добавленная строка осталась в списке и включена.

Save сохраняет настройки учётной записи. Verify Connection проверяет обращение браузера к /models; затем ещё нужно найти ожидаемый ID. Проверка из административного меню её не заменяет: там к API обращался сервер Open WebUI.

Проверим полный ответ на объявлении книжного клуба

После сохранения соединения проверим нужную запись в каталоге, а затем саму генерацию. Успешный ответ от /models ещё не гарантирует, что ключ имеет право запускать модель и что запрос POST <Base URL>/chat/completions проходит без ошибок.

Откройте новый чат:

  1. В списке моделей найдите и выберите фактический идентификатор (Model ID), который дал оператор API. Если в общем списке уже есть модели с похожими названиями от других источников, вспомните, как различать записи моделей с помощью префиксов (Prefix ID), и ориентируйтесь на точный идентификатор, а не на произвольное отображаемое имя.

  2. Отправьте в чат учебный запрос с вымышленным объявлением:

    Сократи до двух предложений, сохранив все условия: «Учебный книжный клуб собирается в субботу в 15:00 в читальном зале. Обсуждаем выбранную книгу. Можно прийти без выступления и просто послушать».

  3. Не закрывайте и не перезагружайте вкладку браузера, пока ответ не завершится полностью.

Инструменты разработчика и экспорт сетевых журналов с заголовками авторизации для упражнения не нужны. Проверим результат по отдельным наблюдениям:

  • Настройка сохранена: запись подключения остаётся на месте при повторном открытии Settings → Connections.
  • Нужная запись найдена: при пустом поле Model IDs в списке выбора моделей есть ожидаемый фактический ID подготовленного источника. Любая другая запись эту проверку не заменяет.
  • Генерация завершена и проверена по смыслу: в окне чата без ошибок отобразился законченный ответ из двух предложений, в котором сохранены все четыре условия исходного текста (суббота в 15:00, читальный зал, обсуждение выбранной книги и возможность прийти просто послушать без выступления).

Если все три пункта сошлись, настройка сохранена, ожидаемый ID доступен и получен полный ответ через выбранную запись. Сам по себе складный текст не доказывает, от какого источника пришёл ответ, и ничего не говорит об отсутствии серверных записей или стоимости вызова.

Что проверить, если подключение не сработало

Если подключение не сработало, начните с этапа, на котором возникла ошибка. Ослаблять настройки безопасности браузера, устанавливать расширения для обхода CORS или менять переменную CORS_ALLOW_ORIGIN на сервере Open WebUI не нужно: эти действия либо небезопасны, либо не влияют на заголовки чужого API.

Наблюдение в интерфейсеВозможные причины и что проверить
В личных настройках Settings нет вкладки ConnectionsВозможно, прямые подключения не разрешены или отличается конфигурация доступа. Уточните у администратора состояние переключателя в Settings → Admin → Connections и версию Open WebUI.
Ошибка при Verify Connection или каталог моделей не загружается (при пустом Model IDs)Возможна ошибка GET <Base URL>/models, но API мог также вернуть пустой каталог или список без ожидаемого ID. Проверьте точное написание Base URL (включая наличие или отсутствие /v1), срок действия ключа и то, не указывает ли адрес на localhost или внутреннюю сеть сервера, недоступную с вашего компьютера. Общее сообщение Network Problem не указывает однозначно на CORS: возможны недоступность адреса или проблема с сертификатом.
Признаки блокировки межсайтового запроса (CORS) или смешанного содержимогоВозможная причина — целевой API не разрешил точный origin (схему, хост и порт) вашего Open WebUI в заголовках ответа. Другой вариант — ограничения браузера при обращении со страницы https:// к http:// или локальному ресурсу (правила Mixed Content и ограничения доступа к локальной сети). Передайте оператору API точный origin страницы Open WebUI и этап, на котором возник сбой (GET /models или POST /chat/completions).
Модель видна в списке и выбирается, но при отправке объявления возникает ошибкаЕсли Model IDs заполняли вручную, список моделей вообще не запрашивался у сервера. Если каталог загрузился автоматически, это не гарантирует успех следующего запроса POST /chat/completions. Сверьте с оператором API фактический Model ID, права временного ключа именно на генерацию и лимиты счёта.

Другое устройство и завершение учебной пробы

При входе в ту же учётную запись с другого устройства или браузера личные настройки v0.12.3 могут загрузиться с сервера (загрузка личных настроек). Но запрос к модели выполнит уже этот браузер из доступной ему сети. Наличие сохранённой записи не гарантирует, что адрес заработает на другом устройстве; исчезновение записи после смены браузера тоже не гарантировано.

После пробы с объявлением книжного клуба закройте временный доступ. Если подключение больше не нужно, откройте Settings → Connections, удалите созданную запись и сохраните настройки (удаление личного соединения в v0.12.3). Это действие убирает адрес и ключ из текущих сохранённых настроек пользователя, но не удаляет историю диалогов, серверные журналы или резервные копии и не аннулирует сам ключ у поставщика API. Отдельно подтвердите у оператора API отзыв или истечение учебного ключа.

В пробе с объявлением мы разделили маршрут запроса, место хранения ключа в v0.12.3 и проверки сохранения, каталога /models и ответа /chat/completions. По этим различиям можно выбрать личное браузерное или обычное серверное подключение для своей задачи.

Материалы урока

Отметить прохождение

Отметьте урок после того, как получили проверяемый результат из практической части.

tro-island>