issue: Failed to load models: SyntaxError: Unexpected token ‘<', "<!DOCTYPE "… is not valid JSON

用户使用 Docker Compose 部署 Open WebUI v0.9.6,搭配 Ollama v0.9.3、Keycloak 认证和 Nginx 反向代理。在 Chromium 系浏览器(Brave)中访问时,模型选择器为空,浏览器控制台报错 Failed to load models 。通

issue: Failed to load models: SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON

issue: Failed to load models: SyntaxError: Unexpected token ‘<', "<!DOCTYPE "… is not valid JSON

快速结论:该报错通常出现在 Open WebUI 前端请求后端获取模型列表时,后端返回了 HTML 页面而非预期的 JSON 数据。优先排查反向代理配置(Nginx)是否正确处理了 `/api/models` 路径的转发。

问题场景

用户使用 Docker Compose 部署 Open WebUI v0.9.6,搭配 Ollama v0.9.3、Keycloak 认证和 Nginx 反向代理。在 Chromium 系浏览器(Brave)中访问时,模型选择器为空,浏览器控制台报错 Failed to load models。通过 curl 直接测试 Docker 容器内的 /api/models 端点能正常返回 JSON,但浏览器侧获取数据失败。

报错原文

+layout.svelte:211 Failed to load models:
SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON

Failed to load module script:
Expected a JavaScript-or-Wasm module script but the server responded with a MIME type of "text/html".
Strict MIME type checking is enforced for module scripts per HTML spec.

原因分析

可能原因:Nginx 反向代理配置不完整,导致浏览器端对 /api/models 的请求被拦截或重定向到了登录页面,前端收到 HTML 页面(如登录页面)而非预期的 JSON 响应。从浏览器控制台的完整报错来看,前端请求模型 API 时收到了 "<!DOCTYPE html" 开头的响应,这表明认证或代理中间件可能中断了正常请求。用户已验证 Docker 容器内部 curl 能正常返回 JSON,且浏览器 localStorage 中存在有效的 JWT token,但 Nginx 层的具体配置未公开,无法进一步确认确切位置。

环境排查

  • 确认 Open WebUI 版本:v0.9.6
  • 确认 Ollama 版本:v0.9.3
  • 确认部署方式:Docker Compose
  • 确认操作系统:Ubuntu 22.04
  • 确认反向代理:Nginx(配置未提供)
  • 确认认证方式:Keycloak(OIDC)
  • 确认浏览器:Chromium 系(Brave)
  • 确认 Ollama 连通性:Docker 内部 curl 访问 http://172.18.0.4:11434/api/tags 返回正常
  • 确认 Open WebUI API 响应:Docker 内部 docker exec open-webui curl -s http://localhost:8080/api/models -H "Authorization: Bearer <JWT>" 返回正常 JSON

解决步骤

  1. 检查 Nginx 配置中 /api/ 路径的转发规则,确保该路径未被重写或重定向。
  2. 验证 Nginx 是否有针对 /api/ 路径的认证拦截或反向代理规则缺失。
  3. 查看 Nginx 访问日志和错误日志,定位返回 HTML 的具体请求 URL。
  4. 检查 Open WebUI 的 OIDC 配置是否将未经认证的 API 请求重定向到了 Keycloak 登录页,/api/models 应返回 401 JSON 而非 HTML 重定向。
  5. 如果使用 Nginx 的 auth_request 模块,请确认 auth_request 仅限于需要认证的页面路径,/api/models 应直接转发给 Open WebUI 处理。
  6. 确保浏览器没有缓存旧页面或 Service Worker 干扰,尝试清空浏览器缓存或使用无痕模式测试。

验证方法

在浏览器中直接访问 https://chat.example.com/api/models,观察返回的响应格式。如果看到 JSON 数据(即便是 {"detail":"Not authenticated"}),说明代理配置正常;如果看到 HTML 页面,说明代理或认证中间件仍在拦截 API 请求。多次刷新页面并观察模型选择器是否正常加载。

参考来源

open-webui/open-webui #26279

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 9831

发表回复

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