Flowise嵌入Shopware 6网站遇Content-Type不匹配错误求助
问题分析
在将基于Flowise开发的RAG聊天机器人嵌入Shopware 6(Vue2)网站时,触发以下错误:
Error: Expected content-type to be text/event-stream, Actual: application/json; charset=utf-8
Flowise部署在自有子域名(VPS+Cloudflare),服务器端直接测试无异常,但嵌入第三方网站后报错,临时降级到flowise-embed@1.3.14可暂时解决问题。
错误原因排查
1. Cloudflare代理修改响应头
Cloudflare的默认缓存、自动优化规则会干扰Server-Sent Events(SSE)响应:
- 自动压缩(Auto Minify)或Rocket Loader会尝试转换响应内容,导致
text/event-stream被修改为application/json。 - 缓存规则未绕过SSE请求,Cloudflare缓存后返回的响应头被篡改。
2. Flowise版本不兼容
新版本的flowise-embed可能调整了SSE请求的预期格式,但后端部署的Flowise版本未同步更新,导致响应的Content-Type不符合前端预期。
3. Shopware 6/Vue2请求拦截器干扰
Vue2项目中的请求拦截器(如axios拦截器)可能强制设置Accept: application/json请求头,或强制解析所有响应为JSON,导致Flowise的SSE响应被错误处理。
4. CORS配置缺失
虽然服务器端测试正常,但跨域场景下,Flowise的CORS配置未明确允许text/event-stream作为响应头类型,浏览器端可能对响应头做了默认转换。
彻底解决办法
针对Cloudflare配置问题
- 为Flowise子域名添加页面规则:
- 禁用
Auto Minify(HTML/CSS/JS全部关闭) - 禁用
Rocket Loader - 设置缓存规则为
Bypass cache,确保SSE请求不被缓存
- 禁用
- 确认SSL/TLS模式为
Full或Full (strict),避免中间层篡改响应头
针对版本兼容问题
- 同步Flowise后端与
flowise-embed版本:如果后端是旧版本,升级后端到与最新embed匹配的版本;如果使用最新后端,确认embed版本与之兼容,查看Flowise官方版本对应关系 - 回退后端到
flowise-embed@1.3.14对应的后端版本,保持前后端版本一致
针对Shopware/Vue2拦截器问题
- 在Vue2项目中,为Flowise嵌入的请求单独配置:
- 跳过全局请求拦截器中强制设置
Accept头的逻辑 - 设置响应类型为
stream,示例代码:// 针对Flowise请求的单独配置 axios.get('https://your-flowise-subdomain/api/v1/chat', { responseType: 'stream', headers: { 'Accept': 'text/event-stream' } })
- 跳过全局请求拦截器中强制设置
- 检查是否有全局响应拦截器强制解析JSON,对Flowise的响应跳过该逻辑
针对CORS配置问题
- 在Flowise部署配置中,更新CORS设置:
- 允许Shopware网站的域名作为跨域来源
- 明确允许
text/event-stream在响应头中返回,配置示例(若使用环境变量):CORS_ALLOWED_ORIGINS=https://your-shopware-domain.com CORS_ALLOWED_HEADERS=Content-Type,Accept CORS_EXPOSE_HEADERS=Content-Type
- 用curl验证后端响应头:
确认返回的curl -I https://your-flowise-subdomain/api/v1/chatContent-Type为text/event-stream
内容的提问来源于stack exchange,提问作者Daniel Soublett
相关产品推荐
相关产品推荐

