快速结论:该报错发生在浏览器通过 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://localhost 或 http://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 而非预期的 200 或 204,导致浏览器认为服务端不支持跨域请求。
报错原文
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逐字符对比。
解决步骤
- 使用
echo $OLLAMA_ORIGINS查看当前配置(Linux 环境)。 - 对比浏览器实际发送的
Origin头(如http://my-website),确保二者完全一致,注意协议、域名、端口、结尾斜杠等细节。 - 若需允许本地开发环境访问,在
OLLAMA_ORIGINS中显式添加回环地址,例如:export OLLAMA_ORIGINS="http://localhost,http://127.0.0.1,http://my-website",然后重启 Ollama 服务。 - 可使用以下命令快速验证(需替换
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-Origin 和 Access-Control-Allow-Methods 头部,即表示配置正确。随后在浏览器中刷新页面重新发起 AJAX/fetch 请求,确认不再出现 405 错误。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Question]: How to deal with the situation that the user_id returned in the Conversation table in the database is null?](https://www.chat-gpts.plus/wp-content/uploads/2026/08/7940-bcfd3c79-768x403.jpg)
![[Question]: dependency failed to start: container ragflow-mysql is unhealthy](https://www.chat-gpts.plus/wp-content/uploads/2026/08/7501-3cad0829-768x403.jpg)
