Skip to content

fix(image): 修复新增供应商生图请求的 CORS 失败#199

Closed
AiW520 wants to merge 2 commits into
ljquan:developfrom
AiW520:codex/fix-provider-image-cors
Closed

fix(image): 修复新增供应商生图请求的 CORS 失败#199
AiW520 wants to merge 2 commits into
ljquan:developfrom
AiW520:codex/fix-provider-image-cors

Conversation

@AiW520

@AiW520 AiW520 commented Jul 19, 2026

Copy link
Copy Markdown

问题背景

用户新增图片供应商、选择模型并提交提示词后,任务进入生成状态,但随后报错:

Failed to fetch

API Key、模型列表及不带额外请求头的图片生成接口均可正常调用,问题只发生在浏览器环境。

根因

图片生成链路此前会无条件向所有图片供应商请求添加 X-Request-Id,用于请求超时后的结果找回。

跨域供应商的 CORS 响应没有在 Access-Control-Allow-Headers 中放行该自定义请求头,导致浏览器 OPTIONS 预检失败。正式生图请求尚未发送,前端就收到 TypeError: Failed to fetch

curl 不执行浏览器 CORS 策略,因此命令行调用成功不能证明浏览器链路正常。

修复内容

  • X-Request-Id 限定为供应商能力,不再对所有图片供应商全局注入。
  • 仅在受信任的 Tuzi 同源请求或本地开发代理请求中保留 request ID。
  • 跨域 Tuzi 与其他自定义供应商自动省略该请求头,避免 CORS 预检失败。
  • 仅在请求头实际发送时:
    • 记录 request ID 日志;
    • 回传 onRequestSent
    • 在超时错误中附带 request ID;
    • 调用 /log/get-request 执行结果找回。
  • 同步图片 API、图片适配器和 fallback executor 使用一致的能力判断。
  • 测试模式不再误触发 Vite 开发代理 URL 改写。
  • 更新 request ID 机制文档,并新增完整故障复盘。

回归测试

新增测试覆盖:

  • 自定义跨域供应商不会发送 X-Request-Id
  • Tuzi 跨域请求不会启用 request ID 找回。
  • Tuzi 同源请求仍保留 request ID 找回能力。

验证结果

  • 相关 Vitest:35 项通过
  • drawnix TypeScript 类型检查通过
  • Web 主应用生产构建通过
  • Service Worker 生产构建通过
  • git diff --check 通过
  • API Key 敏感信息扫描通过
  • 真实浏览器新增供应商并获取模型成功
  • 真实选择 gpt-image-2 生图成功
  • 任务状态正常进入“已完成”
  • 控制台未出现本次请求的 Failed to fetch

兼容性

  • 不改变模型路由、请求体或图片响应解析。
  • 不影响异步图片、视频和音频任务。
  • 不支持 request ID 找回的供应商稳定降级为普通请求。
  • Tuzi 同源/开发代理环境继续保留超时找回能力。

已知仓库基线问题

仓库全量测试仍有既存的音频测试 mock 缺失导出问题;全量 lint 也存在历史错误。这些问题不在本 PR 修改文件和功能范围内,不影响本次定向测试、类型检查及生产构建结果。

@netlify

netlify Bot commented Jul 19, 2026

Copy link
Copy Markdown

Deploy Preview for ai-tu ready!

Name Link
🔨 Latest commit 2b41b0d
🔍 Latest deploy log https://app.netlify.com/projects/ai-tu/deploys/6a5c447420ba9000088f1bf5
😎 Deploy Preview https://deploy-preview-199--ai-tu.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
Lighthouse
Lighthouse
1 paths audited
Performance: 70
Accessibility: 80
Best Practices: 100
SEO: 90
PWA: 100
View the detailed breakdown and full score reports

To edit notification comments on pull requests, go to your Netlify project configuration.

@vercel

vercel Bot commented Jul 19, 2026

Copy link
Copy Markdown

@2040725155-star is attempting to deploy a commit to the ljquan's projects Team on Vercel.

A member of the Team first needs to authorize it.

@AiW520 AiW520 closed this Jul 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants