ShroomPenAñadir a Chrome

Configura OLLAMA_ORIGINS para una extensión de Chrome

Ollama responde 403 Forbidden a una extensión de Chrome porque las solicitudes de la extensión llevan el origen chrome-extension://<id de la extensión>, y la lista de orígenes permitidos de Ollama no incluye las extensiones del navegador por defecto. Para solucionarlo, configura la variable de entorno OLLAMA_ORIGINS con ese único origen, chrome-extension:// seguido del ID de la extensión, y reinicia Ollama. Evita OLLAMA_ORIGINS=*, que deja que cualquier sitio web y cualquier extensión de tu navegador usen tu API de Ollama.

Publicado el

Por qué aparece el 403

El servidor de Ollama comprueba el encabezado Origin de las solicitudes que llegan desde un navegador. Si el origen está en su lista de permitidos, responde con normalidad y añade un encabezado Access-Control-Allow-Origin. Si no lo está, detiene la solicitud con un 403 Forbidden y el cuerpo vacío.

La lista integrada (consulta envconfig/config.go) cubre http y https en localhost, 127.0.0.1 y 0.0.0.0 en cualquier puerto, además de los esquemas app://, file://, tauri://, vscode-webview:// y vscode-file://. Las extensiones del navegador no están incluidas. Las preguntas frecuentes de Ollama lo dicen claramente: para las extensiones del navegador tienes que permitir tú mismo el origen de la extensión.

Comprobamos lo que Chrome envía en realidad con una extensión de prueba que tiene permiso de host para localhost (Ollama 0.10.1, Chrome 147):

Solicitud de la extensiónEncabezado OriginOllama por defectoOLLAMA_ORIGINS con la extensión
GET /v1/models (lista de modelos)Ninguno200 OK200 OK
POST /v1/chat/completions (chat)chrome-extension://<id>403 ForbiddenFunciona

Por eso una extensión puede mostrar tus modelos y aun así fallar en cuanto envía una instrucción. La solución está del lado de Ollama, no en la configuración de la extensión.

La solución

  1. Busca el ID de la extensión

    Abre chrome://extensions, activa el modo de desarrollador y copia el ID que aparece en la tarjeta de la extensión. El ID también es la última parte de su dirección en la Chrome Web Store. El ID de ShroomPen aparece más abajo.

    ghigbnpoahodgnhlgbggjphpflkofgfn
  2. Configura OLLAMA_ORIGINS con el origen de la extensión

    Asigna a la variable de entorno OLLAMA_ORIGINS el valor chrome-extension:// seguido del ID. Para ShroomPen, la línea aparece más abajo. Separa varios orígenes con comas.

    OLLAMA_ORIGINS=chrome-extension://ghigbnpoahodgnhlgbggjphpflkofgfn
  3. Reinicia Ollama

    Cierra Ollama por completo y vuelve a abrirlo. Solo lee OLLAMA_ORIGINS al arrancar.

  4. Comprueba que el origen está permitido

    Envía una solicitud con ese encabezado Origin usando curl. La respuesta debería ser 200 OK con un encabezado Access-Control-Allow-Origin que nombre la extensión, no 403 Forbidden.

    curl -i -H "Origin: chrome-extension://ghigbnpoahodgnhlgbggjphpflkofgfn" http://localhost:11434/api/version

    Busca HTTP/1.1 200 OK y un encabezado Access-Control-Allow-Origin que repita el origen de la extensión. Si sigues viendo 403 Forbidden, Ollama se está ejecutando sin la nueva configuración. En Windows PowerShell 5, escribe curl.exe en lugar de curl.

Cómo configurar OLLAMA_ORIGINS en cada sistema

Si no usas ShroomPen, sustituye el origen de abajo por el de tu extensión. Estos pasos siguen las preguntas frecuentes de Ollama sobre la configuración del servidor.

Windows

Ollama en Windows lee las variables de entorno de tu usuario y del sistema al arrancar.

  1. Cierra Ollama desde su icono en el área de notificación de la barra de tareas.
  2. Abre Configuración y busca «variables de entorno»; luego elige «Editar las variables de entorno de esta cuenta».
  3. Añade una nueva variable de usuario llamada OLLAMA_ORIGINS. Como valor, pega el origen de la extensión (lo que va después de OLLAMA_ORIGINS= en el paso 2) y haz clic en Aceptar.
  4. Vuelve a abrir Ollama desde el menú Inicio.

O configura la misma variable de usuario desde una terminal, y después cierra y vuelve a abrir Ollama:

setx OLLAMA_ORIGINS "chrome-extension://ghigbnpoahodgnhlgbggjphpflkofgfn"

macOS (aplicación de Ollama)

La aplicación de Ollama no lee el perfil de tu shell, así que configura la variable con launchctl y luego cierra Ollama desde la barra de menús y vuelve a abrirlo:

launchctl setenv OLLAMA_ORIGINS "chrome-extension://ghigbnpoahodgnhlgbggjphpflkofgfn"

Un valor configurado con launchctl setenv no sobrevive a un reinicio del Mac. Vuelve a ejecutar el comando después de reiniciar, o añádelo a un script de inicio de sesión.

Linux (servicio de systemd)

El script de instalación configura Ollama como servicio de systemd. Ejecuta sudo systemctl edit ollama y añade estas líneas:

[Service]
Environment="OLLAMA_ORIGINS=chrome-extension://ghigbnpoahodgnhlgbggjphpflkofgfn"

Después recarga y reinicia:

sudo systemctl daemon-reload
sudo systemctl restart ollama

Si ejecutas ollama serve a mano

Si arrancas tú el servidor en una terminal (macOS o Linux), configura la variable en la misma línea:

OLLAMA_ORIGINS=chrome-extension://ghigbnpoahodgnhlgbggjphpflkofgfn ollama serve

Por qué no usar OLLAMA_ORIGINS=*

Muchas guías te dicen que configures OLLAMA_ORIGINS=*. Funciona, pero le dice a Ollama que responda a solicitudes del navegador desde cualquier origen. Cualquier sitio web abierto en tu navegador, y cualquier extensión que tengas instalada, podría enviar instrucciones a tus modelos locales, ver qué modelos tienes y leer las respuestas. Lo mismo pasa con chrome-extension://*, que las preguntas frecuentes de Ollama ofrecen como opción para «permitir todas las extensiones».

Nombrar la única extensión que usas no cuesta nada más y deja fuera todo lo demás. Lo probamos: con OLLAMA_ORIGINS configurado con el origen de una extensión, las solicitudes de esa extensión funcionan y las que llevan el origen de cualquier otra extensión siguen recibiendo un 403.

Cómo usar Ollama desde ShroomPen

ShroomPen es una extensión gratuita para Chrome que pone el borrador de un modelo local directamente en el campo de texto en el que escribes. Envía las solicitudes desde su proceso en segundo plano, así que necesita la entrada de OLLAMA_ORIGINS de arriba. Page Assist, una extensión de panel lateral de código abierto, reescribe los encabezados para las direcciones de localhost y normalmente funciona sin ella.

El resto de la configuración, desde descargar un modelo hasta el primer borrador, está en Usa Ollama en Chrome. O añade ShroomPen a Chrome y elige Local server (servidor local) en su configuración.

Relacionado

Preguntas

¿Por qué Ollama devuelve 403 Forbidden a mi extensión de Chrome?

Ollama compara el encabezado Origin de las solicitudes del navegador con una lista de orígenes permitidos. Por defecto, la lista cubre http y https en localhost, 127.0.0.1 y 0.0.0.0 y algunos esquemas de aplicaciones de escritorio, pero no los orígenes chrome-extension://, así que Ollama rechaza la solicitud con un 403 y el cuerpo vacío.

¿Debo poner OLLAMA_ORIGINS en *?

Mejor no. Con *, Ollama responde a solicitudes del navegador desde cualquier origen, así que cualquier sitio web que visites y cualquier extensión que tengas instalada podrían enviar instrucciones a tus modelos o leer las respuestas. Permite solo la extensión que usas.

¿Por qué se carga la lista de modelos pero el chat sigue fallando con 403?

Chrome no añade el encabezado Origin a las solicitudes GET simples que hace una extensión con permiso de host, como la lista de modelos, pero sí lo añade a las solicitudes POST, como el chat. Ollama solo comprueba las solicitudes que llevan Origin, así que la lista funciona y el chat se rechaza hasta que permites el origen de la extensión.

¿Puedo permitir varias extensiones?

Sí. OLLAMA_ORIGINS admite una lista separada por comas, por ejemplo dos orígenes chrome-extension:// separados por una coma, sin espacios.

¿OLLAMA_ORIGINS sustituye los orígenes predeterminados?

No. Ollama añade tus orígenes a su lista integrada, así que las páginas de localhost y las aplicaciones de escritorio que ya funcionaban siguen funcionando.

¿El ID de la extensión es el mismo en todos los equipos?

Para una extensión instalada desde la Chrome Web Store, sí. Una copia descomprimida cargada en modo de desarrollador recibe otro ID, así que consulta chrome://extensions si usas una.

Ya configuré OLLAMA_ORIGINS y sigo recibiendo un 403. ¿Qué hago?

Normalmente es porque Ollama no se reinició del todo, o porque la variable se configuró en un sitio que el proceso de Ollama no lee. Cierra Ollama desde el icono de la bandeja del sistema o de la barra de menús, vuelve a abrirlo y ejecuta la comprobación con curl. Revisa también que no haya una errata ni una barra final en el origen.