# Ollama CORS: открыть локальный интерфейс в браузере, не открывая сервер в сеть

Источник: https://modelium.tech/zhurnal/ollama-cors/

Если браузерный интерфейс на вашем компьютере не видит Ollama, сначала проверьте адрес API: по умолчанию Ollama слушает 127.0.0.1:11434, а браузерным страницам с localhost и 127.0.0.1 уже разрешены межсайтовые запросы. Добавлять `OLLAMA_ORIGINS` для такого случая обычно не нужно. CORS регулирует браузер, но не заменяет сетевую защиту или авторизацию.

**Статус: инструкция по документации, не собственный запуск Modelium.** Ниже пример для локального браузерного интерфейса и Ollama на **одном компьютере**. Нужны установленная Ollama, открытая в браузере локальная страница и доступ к инструментам разработчика; конкретный сторонний UI здесь не устанавливаем. Интернет для этой проверки API не требуется, но установку приложения и загрузку моделей выполняют отдельно. [s1](#src-s1) [s3](#src-s3)

## Почему локальная страница не подключается?

Представьте, что интерфейс открыт по `http://127.0.0.1:3000`, а Ollama — по `http://127.0.0.1:11434`. Адреса с разными портами — разные **origins** (источники страницы в браузере). CORS — правило, по которому браузер разрешает странице читать ответ другого origin. Если адрес API недоступен или указан неверно, изменение CORS ничего не исправит. Ollama по умолчанию слушает только `127.0.0.1:11434`; это не адрес компьютера соседа в локальной сети. [s1](#src-s1) [s2](#src-s2) [s4](#src-s4)

**Важно:** Ollama уже разрешает браузерные origins `localhost` и `127.0.0.1` (также разные их порты). Параметр `OLLAMA_ORIGINS` **добавляет**, а не сужает этот список. Не ставьте `*`, не открывайте `OLLAMA_HOST=0.0.0.0:11434` «чтобы заработал CORS»: последнее меняет сетевую доступность API и не служит безопасной настройкой браузера. Даже успешный CORS-тест не доказывает, что доступ к модели защищён от других программ на вашем компьютере. [s1](#src-s1) [s2](#src-s2) [s3](#src-s3) [s4](#src-s4)

## Как проверить доступность сервера без изменения настроек?

- На том же компьютере откройте в браузере `http://127.0.0.1:11434/api/tags`. Ожидайте JSON с полем `models` — список скачанных моделей может быть пустым. Если соединение не устанавливается, сперва запустите Ollama и проверьте её адрес, а не меняйте CORS. Это проверка списка, **не запуск модели**. [s2](#src-s2) [s3](#src-s3) [s5](#src-s5)

- Откройте вашу локальную страницу интерфейса, затем инструменты разработчика браузера → **Network/Сеть**. Отправьте запрос к API из интерфейса. Сверьте точный URL запроса: в примере это `http://127.0.0.1:11434/api/tags`, а не адрес удалённого сервера. Если нет запроса или ошибка соединения, проверьте настройки именно интерфейса. Если в консоли написано об отказе CORS, сравните origin страницы с разрешённым списком; порт и схема (`http`/`https`) важны. [s2](#src-s2) [s3](#src-s3) [s4](#src-s4) [s5](#src-s5)

- Для **учебной проверки без модели** из консоли инструментов разработчика на локальной странице `http://127.0.0.1:3000` выполните `fetch('http://127.0.0.1:11434/api/tags').then(r => r.json()).then(x => console.log(x.models))`. Ожидаемый результат — массив, возможно `[]`; не запускайте скопированный код на чужой странице. В этом примере страницы на `127.0.0.1` находятся в разрешённом списке Ollama. [s2](#src-s2) [s3](#src-s3) [s5](#src-s5)

## Как проверить другой origin и не перепутать CORS с защитой?

Если вы пользуетесь терминалом, запросите только заголовки предварительной проверки: `curl -i -X OPTIONS 'http://127.0.0.1:11434/api/tags' -H 'Origin: http://127.0.0.1:3000' -H 'Access-Control-Request-Method: GET'`. Проверьте в ответе `Access-Control-Allow-Origin` для этого origin. Затем повторите команду с `Origin: https://example.invalid` вместо локального origin: этот внешний адрес не входит во встроенный список; для него **не должно** быть разрешающего заголовка. Не делайте вывод по одному HTTP-коду: в реальном браузере правило применяет сам браузер. `curl` не подчиняется CORS и по-прежнему может напрямую читать локальный API. [s2](#src-s2) [s3](#src-s3) [s4](#src-s4)

Если UI открывается с **другого домена**, Ollama FAQ описывает `OLLAMA_ORIGINS` для добавления конкретного origin. Для начала убедитесь, что этому UI можно доверять: точный адрес страницы получит доступ к локальному API из браузера. Широкие маски разрешений и публикация Ollama в интернет не нужны для обычной страницы на `127.0.0.1`. Если UI находится на другом устройстве, это уже другая сетевая архитектура с отдельным контролем доступа, а не исправление локального CORS. [s1](#src-s1) [s2](#src-s2) [s4](#src-s4)

## Что делать, если результат отличается?

- `**/api/tags**`** не открывается:** проверьте, запущена ли Ollama и не изменён ли `OLLAMA_HOST`; пока не отвечает локальный API, CORS не при чём. [s1](#src-s1) [s2](#src-s2) [s5](#src-s5)

- **Прямой URL отвечает, но UI падает:** сравните точный origin страницы, запрос API и сообщение Network/Console. `http://localhost:3000` и `http://127.0.0.1:3000` — разные origins, хотя обе формы входят во встроенный список Ollama. [s2](#src-s2) [s4](#src-s4)

- **Сторонняя страница не получила разрешающий заголовок:** это ожидаемая браузерная граница, **не** доказательство сетевой изоляции. Не разрешайте чужой origin ради устранения ошибки. [s2](#src-s2) [s3](#src-s3) [s4](#src-s4)

Основной следующий шаг — [проверить доступность Ollama отдельно от браузерного интерфейса](/zhurnal/ollama-healthcheck/). Сама инструкция не подтверждена реальным запуском Modelium; ответ модели, безопасность чужого UI и изоляцию сети редакция здесь не испытывала.

## Источники

1. [Ollama FAQ — bind address и дополнительные web origins](https://raw.githubusercontent.com/ollama/ollama/d3c846f8b0279e79b0e3a960a7575fde6920e9df/docs/faq.mdx) — получено 2026-10-07
2. [Ollama envconfig — встроенный список origins и OLLAMA_HOST](https://raw.githubusercontent.com/ollama/ollama/d3c846f8b0279e79b0e3a960a7575fde6920e9df/envconfig/config.go) — получено 2026-10-07
3. [Ollama server routes — CORS middleware и /api/tags](https://raw.githubusercontent.com/ollama/ollama/d3c846f8b0279e79b0e3a960a7575fde6920e9df/server/routes.go) — получено 2026-10-07
4. [MDN — Cross-Origin Resource Sharing](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CORS) — получено 2026-10-07
5. [Ollama API — List models (/api/tags)](https://docs.ollama.com/api/tags) — получено 2026-10-07
