// 新建空白 uni-app vue3 项目,在页面 onLoad 中执行:
uni.request({
url: 'https://api.next.bspapp.com/client',
method: 'POST',
header: { 'Content-Type': 'application/json' },
data: { method: 'serverless.auth.user.anonymousAuthorize', params: '{}' },
success: (res) => {
console.log('statusCode =', res.statusCode);
console.log('body =', JSON.stringify(res.data));
}
})
// uniCloud 层面的复现(需关联任意阿里云 mp- 开头服务空间):
uniCloud.callFunction({
name: '任意已上传的云函数名',
data: {}
}).then(res => {
console.log('成功', res)
}).catch(err => {
console.log('失败:', err.errCode, err.errMsg) // SYS_ERR request:ok
}) - 发布:2026-07-28 10:32
- 更新:2026-07-28 10:33
- 阅读:30
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: 25H2
HBuilderX类型: 正式
HBuilderX版本号: 5.15
手机系统: Android
手机系统版本号: Android 12
手机厂商: 华为
手机机型: AGS5-W00 (华为平板)
页面类型: vue
vue版本: vue3
打包方式: 云端
项目创建方式: HBuilderX
示例代码:
操作步骤:
- 使用 HBuilderX 5.15,新建空白 uni-app vue3 项目(或任意现有项目)
- 在页面中加入上述 uni.request 示例代码
- 运行到 Android 手机/平板(标准基座或自定义基座均可复现)
- 查看控制台输出的响应
5.(可选)将 Content-Type 改为 application/json;charset=utf-8 再运行,对比结果
6.(uniCloud 复现)关联阿里云 mp- 开头服务空间,调用任意云函数,查看 catch 到的错误
- 使用 HBuilderX 5.15,新建空白 uni-app vue3 项目(或任意现有项目)
- 在页面中加入上述 uni.request 示例代码
- 运行到 Android 手机/平板(标准基座或自定义基座均可复现)
- 查看控制台输出的响应
5.(可选)将 Content-Type 改为 application/json;charset=utf-8 再运行,对比结果
6.(uniCloud 复现)关联阿里云 mp- 开头服务空间,调用任意云函数,查看 catch 到的错误
预期结果:
- 请求头 Content-Type 按源码原样发送 application/json,网关返回其业务响应(如 400 MissingSpaceId 之类的参数校验错误,证明请求已正常穿过 mime 校验到达业务层)
- uniCloud.callFunction 正常调用云函数并返回结果
- 请求头 Content-Type 按源码原样发送 application/json,网关返回其业务响应(如 400 MissingSpaceId 之类的参数校验错误,证明请求已正常穿过 mime 校验到达业务层)
- uniCloud.callFunction 正常调用云函数并返回结果
实际结果:
- 网关返回 415 Unsupported Media Type,响应体:{"status":415,"error":"Unsupported Media Type","message":"Invalid mime type \"application_fjson\": does not contain '/'"},即实际发出的 Content-Type 被改写成 application_fjson
- Content-Type 改为 application/json;charset=utf-8 后同一请求立即恢复正常(返回 400 MissingSpaceId 业务错误)
- uniCloud.callFunction 一律 reject:{errCode: "SYS_ERR", errMsg: "request:ok", requestId: undefined},云函数控制台无任何调用日志
- 网关返回 415 Unsupported Media Type,响应体:{"status":415,"error":"Unsupported Media Type","message":"Invalid mime type \"application_fjson\": does not contain '/'"},即实际发出的 Content-Type 被改写成 application_fjson
- Content-Type 改为 application/json;charset=utf-8 后同一请求立即恢复正常(返回 400 MissingSpaceId 业务错误)
- uniCloud.callFunction 一律 reject:{errCode: "SYS_ERR", errMsg: "request:ok", requestId: undefined},云函数控制台无任何调用日志
bug描述:
HBuilderX 5.15 的 App-Android 端,uni.request 发送 Content-Type: application/json 的 POST 请求时,请求头会被错误地改写成 application_fjson("/" 变成 "_f"),导致严格校验 Content-Type 的服务端直接返回 415。
该问题导致 uniCloud 阿里云(mp- 开头空间,走 api.next.bspapp.com 新网关)所有 API 全部不可用:callFunction 抛出 {errCode: "SYS_ERR", errMsg: "request:ok"},云端函数无任何调用记录(请求在网关入口被 415 拒绝,未到达云函数)。
补充特征:
- 检查编译产物 app-service.js,源码中的 'application/json' 字面量完好无损,说明改写发生在基座的请求链路中;
- 只有精确的 "application/json" 会被改写,写成 "application/json;charset=utf-8" 或 "application/json;charset=UTF-8" 则原样通过、一切正常,疑似改写逻辑按完整字符串精确匹配触发;
- "request:ok" 为误导性报错:uni.request 传输层成功时 errMsg 即 "request:ok",uniCloud 客户端解析 415 响应体(error 字段为字符串)取不到 message,兜底使用了该成功状态串;
- H5 端无此问题;旧版本工具链打包的 APK 无此问题(旧 SDK 走 api.bspapp.com 老网关且老网关不校验 mime);
- 与 https://ask.dcloud.net.cn/question/215123 为同一 bug(该帖报的是小程序端,本帖补充 App-Android 端复现)。
1 个回复
Ask小助手 - Ask社区AI助手
好的,收到你的 bug 反馈。作为 DCloud 官方人员,我对这个反馈进行如下评审和分析:
1. 反馈质量评审
这个 bug 反馈的整体质量非常高,信息详实且逻辑清晰,特别是对报错现象的深度剖析,极大地降低了官方排查问题的成本。
application_fjson编译 bug)以及误导性报错(request:ok),描述部分非常详细。你不仅指出了表面现象(415 状态码),还深入分析了编译产物、触发条件(精确匹配application/json)以及uniCloud报错的兜底逻辑,这些信息对官方定位问题非常有帮助。uni.request模拟底层请求,另一个是uniCloud.callFunction的实际业务场景。代码可以直接复制到空白项目的onLoad中运行,无需官方人员额外调整。Content-Type对比结果)和第 6 步(uniCloud 场景复现),精准地验证了问题的边界和影响范围。Content-Type后的正常情况,进一步印证了 bug 的存在。这显然不是误报,而是真实存在的功能异常。评审结论:这是一个高质量的 bug 反馈,信息完整,逻辑严密,无需额外补充信息即可进行排查。
2. 问题分析与排查
根据反馈内容,这个 bug 成立的依据非常充分:
uni.request在发送Content-Type: application/json的 POST 请求时,请求头被错误改写为application_fjson,导致服务端(特别是严格校验 MIME 类型的网关)返回 415 错误。uniCloud阿里云(mp-开头空间,走api.next.bspapp.com新网关)的所有 API 不可用,因为uniCloud客户端 SDK 底层也是通过uni.request发送请求。虽然底层传输成功(errMsg: "request:ok"),但网关拒绝处理请求,云函数无法被调用,客户端只能兜底抛出SYS_ERR。application_fjson的改写逻辑,但存在多个与uni.request请求头设置及uniCloud报错相关的记录。例如,在 DCloud问答_157085 中,用户反馈一键登录调用云函数报错SYS_ERR,虽然原因不同,但体现了uniCloud底层请求异常时可能抛出该错误。此外,plus知识库 中明确展示了通过setRequestHeader('Content-Type','application/json')设置请求头的标准用法,这进一步印证了请求头应原样发送,不应被改写。application/json才触发”,可以推测问题出在 App 端基座的请求链路中,可能存在一段针对特定字符串的拦截或替换逻辑,误将/替换为了_f。这很可能是一个特定版本引入的回归 bug。3. 解决方案与建议
由于这是一个由基座底层逻辑导致的 bug,开发者侧无法直接修复,但可以通过以下方式规避:
临时规避方案:
如你在反馈中所提到的,将
Content-Type改为application/json;charset=utf-8或application/json;charset=UTF-8可以绕过这个精确匹配的改写逻辑。对于直接使用uni.request的场景,可以手动修改请求头。但对于uniCloud的内部请求,开发者无法直接修改,建议关注官方后续版本更新。关注官方更新:
该问题已明确指向 HBuilderX 5.15 版本的 App-Android 端基座。建议持续关注 HBuilderX 的更新日志,等待官方修复此问题。通常这类影响核心功能的 bug 会在下一个 alpha 版或正式版中修复。
降级处理:
如果业务强依赖
uniCloud且急需可用,可考虑临时降级到未引入此 bug 的旧版本 HBuilderX 进行打包,但需注意旧版本可能存在其他已修复的问题。要回复问题请先登录或注册
公告
更多>相关问题