Regression with HTTP `OPTIONS` requests returning 405

该报错发生在浏览器通过 AJAX/fetch 访问 Ollama HTTP 接口(如 /api/generate )时,浏览器发出的 CORS 预检 OPTIONS 请求被 Ollama 以 405 Method Not Allowed 拒绝。优先排查 OLLAMA_ORIGINS 环境变量是否与请

快速结论:该报错发生在浏览器通过 AJAX/fetch 访问 Ollama HTTP 接口(如 /api/generate)时,浏览器发出的 CORS 预检 OPTIONS 请求被 Ollama 以 405 Method Not Allowed 拒绝。优先排查 OLLAMA_ORIGINS 环境变量是否与请求中的 Origin 头完全匹配。

适用环境:Ollama 0.32.14,Linux 系统。Issue 中未提及 GPU、CPU 型号等硬件信息。

最快修复方案:暂无确认的一步修复方案。Issue 作者最终发现原因是 OLLAMA_ORIGINS 中配置的域名与实际请求的 Origin 头不精确匹配。可优先尝试将 OLLAMA_ORIGINS 设置为请求页面的完整域名(包含协议和端口,如需允许本地回环地址请显式添加 http://localhosthttp://127.0.0.1)。

注意事项:作者提到旧版本 Ollama 对回环地址(loopback)的 Origin 有特殊处理,即使不匹配 OLLAMA_ORIGINS 也会返回 204 和 CORS 头;0.32.14 移除了这一例外,严格校验 Origin。因此该行为可能是有意为之,需确认配置精确性。

问题场景

用户在前端网页中通过 AJAX 或 fetch 直接调用 Ollama 的 HTTP 接口(如 /api/generate)。浏览器出于 CORS 安全策略,会先发送一个 OPTIONS 预检请求;Ollama 0.32.14 对该请求返回了 405 而非预期的 200204,导致浏览器认为服务端不支持跨域请求。

报错原文

OPTIONS /api/generate HTTP/1.1
user-agent: Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0
accept: */*
accept-language: en-US,en;q=0.5
accept-encoding: gzip, deflate, br, zstd
access-control-request-method: POST
access-control-request-headers: content-type
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: same-site
priority: u=4
te: trailers
host: <my-ollama>
origin: http://<my-website>
referer: http://<my-website>/
connection: close


HTTP/1.1 405 Method Not Allowed
Allow: POST
Content-Type: text/plain
Date: Thu, 20 Aug 2026 05:42:04 GMT
Content-Length: 22
Connection: close

原因分析

可能原因:用户在 Issue 中自行排查后确认:OLLAMA_ORIGINS 中配置的允许来源与浏览器实际发送的 Origin 头不完全匹配。旧版本 Ollama 对回环地址(loopback)有例外处理——即使 Origin 不匹配 OLLAMA_ORIGINS,也会返回 204 和正确的 CORS 头;而 0.32.14 改为严格校验 Origin 与白名单的精确匹配,因此返回 405

环境排查

  • 确认 Ollama 版本是否为 0.32.14(本 Issue 确认的版本)。
  • 检查 OLLAMA_ORIGINS 环境变量的当前值,确认是否包含请求页面的完整来源(协议 + 域名 + 端口,如 http://my-website)。
  • 通过浏览器开发者工具查看请求头中的 Origin 字段,与 OLLAMA_ORIGINS 逐字符对比。

解决步骤

  1. 使用 echo $OLLAMA_ORIGINS 查看当前配置(Linux 环境)。
  2. 对比浏览器实际发送的 Origin 头(如 http://my-website),确保二者完全一致,注意协议、域名、端口、结尾斜杠等细节。
  3. 若需允许本地开发环境访问,在 OLLAMA_ORIGINS 中显式添加回环地址,例如:export OLLAMA_ORIGINS="http://localhost,http://127.0.0.1,http://my-website",然后重启 Ollama 服务。
  4. 可使用以下命令快速验证(需替换 example.com 为你的实际来源):
    curl -i -X OPTIONS -H "Origin: http://example.com" -H "Access-Control-Request-Method: POST" -H "Access-Control-Request-Headers: content-type" localhost:11434/api/generate

验证方法

使用上述 curl 命令手动发送 OPTIONS 请求,若返回 204 No Content 且包含 Access-Control-Allow-OriginAccess-Control-Allow-Methods 头部,即表示配置正确。随后在浏览器中刷新页面重新发起 AJAX/fetch 请求,确认不再出现 405 错误。

参考来源

ollama/ollama #17887

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 19629

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注