404 Assets Not Found Error with OAuth2 Gradio on Localhost

当用户通过 FastAPI + Starlette OAuth2(例如 Azure AD)将 Gradio 应用挂载到自定义路径(如 /gradio 、 /login-demo )时,浏览器请求 localhost:8000/assets/ 或 /gradio_api/ 等端点,但服务器返回 404

404 Assets Not Found Error with OAuth2 Gradio on Localhost

404 Assets Not Found Error with OAuth2 Gradio on Localhost

快速结论:使用 gr.mount_gradio_app 搭配 OAuth2 时,某些静态资源端点(如 /assets//gradio_api/)返回 404,原因是这些端点未正确使用 path 参数(如期望 /gradio/assets/ 而非 /assets/)。此问题在 Gradio 5 主分支已被修复。

问题场景

当用户通过 FastAPI + Starlette OAuth2(例如 Azure AD)将 Gradio 应用挂载到自定义路径(如 /gradio/login-demo)时,浏览器请求 localhost:8000/assets//gradio_api/ 等端点,但服务器返回 404。该问题在官方 OAuth2 示例(gradio/oauth-example)中也可复现。

报错原文

404 Not Found

浏览器控制台或网络标签中可看到针对 /assets/***/gradio_api/*** 的请求返回 404。

原因分析

gr.mount_gradio_app(app, demo, path="/gradio") 调用中,有些端点(例如静态资源 assets 和 API 路径 gradio_api)忽略了 path 参数,仍从根路径解析,导致 404。这并非 OAuth2 本身的错误,而是 Gradio 内部路由匹配问题。

环境排查

  • Gradio 版本:从 4.32.25.23.1 均受该问题影响(在 5.23.1 中仍然可复现)。
  • 操作系统:Linux(用户报告环境)。
  • Python 包:gradio, gradio_client, fastapi, uvicorn, authlib, starlette
  • OAuth 提供商:Azure AD,但问题不限于特定 OAuth 实现。

解决步骤

  1. 确认是否使用最新主分支:此问题在 Gradio 主分支(main)中已被修复。可考虑从 GitHub 源码安装或等待包含修复的下一个正式版本。
  2. 临时规避方案:如果无法升级,可尝试将挂载路径设置为根路径(path="/"),但这可能影响多应用部署结构。
  3. 检查自定义根路径参数:确保 gr.mount_gradio_app 中的 root_pathpath 值一致,例如 root_path="/gradio" 对应 path="/gradio"。但根据 Issue 反馈,即使一致,问题仍可能发生。
  4. 尝试使用官方示例作为基线:对比官方 https://huggingface.co/spaces/gradio/oauth-example 的部署方式,确认问题在空项目上也可复现,以排除自建代码的影响。
  5. 启用详细日志:启动 uvicorn 时添加 --log-level debug,查看请求路径与实际路由匹配情况。

验证方法

在浏览器中打开挂载后的 Gradio 应用(如 http://localhost:8000/gradio),使用开发者工具的“网络”标签页检查页面加载时是否有 /assets//gradio_api/ 相关请求返回 404。若 404 消失,或静态资源正常加载,即表示问题已解决。若使用主分支后问题仍然存在,建议重新打开 Issue。

参考来源

gradio-app/gradio #8453

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 12229

发表回复

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