Repository navigation
v1.3.109 — 修复 CSP blob: 拦截导致游乐场图生图无法发送 (P1)
v1.3.109 — 修复:CSP 拦截 blob: 导致游乐场图生图「点发送无反应」(P1)
问题
生产环境游乐场中选择参考图后点击「发送」无任何反应:无请求发出、无报错、文字与附件仍留在输入框。
根因链
- Caddy CSP 的
connect-src 'self'未放行blob:→ 游乐场把附件blob:URLfetch成data:URL 时被 CSP 拒绝; web/src/components/ai-elements/prompt-input.tsx的Promise.all(...).catch(() => {})静默吞掉该拒绝 →onSubmit永不调用;- 同时
img-src缺blob:→ 附件缩略图预览也不显示。
修复
deploy/Caddyfile.example:img-src与connect-src各放行blob:,并补充注释说明二者缺失各自的症状;prompt-input.tsx:附件转换失败不再静默吞错,改为上报onError(新增code: 'attachment_conversion');playground-input.tsx:接住onError并 toast 提示,用户可见可诊断;- i18n 7 语言新增对应文案(按行插入,未做 JSON 重序列化);
- 新增回归测试
prompt-input-attachment.test.tsx(2 例):blob 读取失败必须上报onError且不得调用onSubmit;正常路径应提交转换后的附件。
验证
- 生产 Caddyfile 已同步修改并 reload,新 CSP 响应头经实测确认生效;
- Playwright 真实浏览器 E2E(打生产):图生图请求成功发出,请求体内联
data:image/png;base64的image_urlpart,结果{thumb:1, delivered:1, userText:true, rawMd:false}; - 单元测试:
NODE_OPTIONS=--max-old-space-size=3072 bunx vitest run src/components/ai-elements/__tests__/prompt-input-attachment.test.tsx→ 2 passed; - typecheck / lint:改动文件无新增错误。
部署
已蓝绿零停机部署至生产(new-api:v1.3.109),公网 200,/api/status 返回 1.3.109。