WSO2 MI HTTP协议违规:无效版本及后端Payload为空问题
WSO2 MI转发问题排查与解决
1. HTTP协议违规报错处理
报错内容:
ERROR.ERROR {TargetHandler} - HTTP protocol violation : Not a valid protocol version: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" For : 127.0.0.1:8000 org.apache.http.ProtocolException: Not a valid protocol version: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN".127.0.0.1:8000
原因:本地Django服务未部署或未启动,WSO2 MI向127.0.0.1:8000发送请求时,收到的不是合法HTTP响应,而是HTML格式的错误页面(如服务器未响应的默认页面),导致MI无法解析HTTP协议版本。
解决步骤:
- 启动Django服务,确保服务正常监听8000端口
- 通过
curl http://127.0.0.1:8000或浏览器访问,验证服务可正常返回HTTP响应
2. 转发Payload为空问题排查
现象:WSO2 MI日志中可正常查看Payload,但到达Django后端时变为null
排查方向:
- 检查WSO2 MI转发配置:
- 确认中介器(如PayloadFactory、Enrich)未意外清空消息体
- 检查HTTP Sender配置,确保开启
Preserve Message Body选项,且未在转发流程中修改Content-Type
- 验证请求方法与Content-Type匹配:
- POST请求需确保Content-Type为
application/json、application/x-www-form-urlencoded等Django支持的类型,且WSO2 MI正确设置了请求头 - 若为GET请求,后端不会接收Payload,需确认是否误用了请求方法
- POST请求需确保Content-Type为
- 检查Django后端接收逻辑:
- 视图函数需正确获取请求体,如使用
request.body(原始字节)、request.POST(表单数据)或request.data(Django REST Framework) - 排查是否有自定义中间件拦截或修改了请求体
- 视图函数需正确获取请求体,如使用
- 抓包验证:
- 使用Wireshark或tcpdump抓取WSO2 MI到Django的请求包,确认MI实际发送的Payload是否为空,定位问题出在MI转发还是Django接收环节
内容的提问来源于stack exchange,提问作者Ajith Nirmal
相关产品推荐
相关产品推荐

