WSO2 API Manager发布API报fetch执行Invalid name错误如何解决
问题产生原因
这个报错不是WSO2 API Manager后端抛出的服务端异常,是浏览器原生fetch API触发的客户端DOM异常,核心触发原因是代码尝试给请求设置不符合HTTP命名规范的头字段名,浏览器在请求发起前就会做合法性校验,直接拦截请求不会发往后端,这也是你反复修改Swagger后端配置始终不生效的原因——请求根本没到达WSO2服务端。
结合你配置带authorization key的Basic安全认证的场景,常见触发场景有三类:
- 配置头字段名时写错格式:把标准授权头名
Authorization误写为带空格的authorization key,HTTP协议明确要求头字段名只能包含英文字母、数字、连字符、下划线,不能包含空格、中文、特殊控制字符,带空格的头名会直接被fetch判定为非法值。 - WSO2 Publisher控制台配置错误:在API安全配置页填写Basic认证参数时,自定义头字段名输入了带空格、换行、不可见特殊字符的内容,前端没有做格式校验就直接拼接进请求头对象,传给fetch时触发报错。
- 旧版本WSO2 APIM前端bug:4.0.0、4.1.0的早期未打补丁版本存在已知前端缺陷,当Basic认证配置项里的参数值包含空格时,前端拼接请求头的逻辑会错误把参数值拆成头字段名,生成非法的头对象触发fetch报错。
有效解决方法
- 修正安全配置的头字段
进入WSO2 Publisher控制台,打开目标API的「运行时配置-安全」页,找到你配置的Basic认证项:- 标准Basic认证的授权头名固定为
Authorization,不要自定义为authorization key这类带空格的名称 - 逐字检查所有配置的参数值,删除里面混入的换行、不可见特殊字符、首尾多余空格
- 标准Basic认证的授权头名固定为
- 修正Swagger/OpenAPI配置
打开API对应的Swagger定义文件,找到securitySchemes节点,确保Basic认证配置符合规范,参考正确配置:
不要在安全配置里自定义带非法字符的头字段,不要把securitySchemes: BasicAuth: type: http scheme: basicname属性设置为含空格、特殊字符的值。 - 修复版本兼容问题
如果你使用的是WSO2 APIM 4.0.0/4.1.0早期版本,优先更新到对应版本的最新补丁包;如果暂时无法更新,可以手动修改Publisher前端的请求构造逻辑:在组装fetch请求头时,增加头名校验逻辑,用正则^[A-Za-z0-9_-]+$匹配所有头字段名,不符合规范的字段直接拦截提示,不要传入fetch调用。 - 快速定位非法头字段
打开浏览器F12开发者工具,切换到控制台标签,复现报错操作前在控制台打印构造的请求头对象,逐一检查所有头字段的键名,找到含非法字符的字段修正即可。
内容的提问来源于stack exchange,提问作者riya
相关产品推荐
相关产品推荐

