You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WSO2侧解决204 No Content响应解析异常问题?

解决WSO2兼容204状态码返回500错误的问题

问题场景

  • 某微服务返回204状态码时,WSO2无法解析响应,返回500 Internal Server Error;将状态码改为404后,WSO2可正常解析且无报错。需从WSO2侧解决该204状态码兼容问题。

错误日志

TargetHandler ERROR_CODE = 101506, STATE_DESCRIPTION = Exception occurred after Server written the request headers and the request body to the backend,
报错信息:
ERROR - TargetHandler HTTP protocol violation : Not a valid protocol version: {"status":"NO_CONTENT","message":"Job data not found","code":1107}HTTP/1.1 204 No Content For
rg.apache.synapse.transport.http.conn.LoggingNHttpClientConnection$LoggingNHttpMessageParser.parse(LoggingNHttpClientConnection.java:404) ~[synapse-nhttp-transport_2.1.7.wso2v183.jar:?]

原因分析

错误日志明确显示为HTTP协议违规:微服务返回204状态码时,附带了响应体内容({"status":"NO_CONTENT","message":"Job data not found","code":1107})。根据HTTP规范,204 No Content响应不应包含任何响应体,WSO2的HTTP解析器严格遵循规范,因此将该情况判定为协议违规,触发500错误。

解决方法(WSO2侧)

方法1:修改HTTP传输适配器配置

编辑WSO2安装目录下的<WSO2_HOME>/repository/conf/axis2/axis2.xml文件,调整HTTP传输的发送器和监听器配置,允许204响应携带内容:

<!-- 修改HTTP传输发送器 -->
<transportSender name="http" class="org.apache.synapse.transport.http.conn.HttpCoreNIOSender">
    <!-- 保留原有参数,新增以下配置 -->
    <parameter name="allow204WithBody">true</parameter>
</transportSender>

<!-- 修改HTTP传输监听器 -->
<transportReceiver name="http" class="org.apache.synapse.transport.http.conn.HttpCoreNIOListener">
    <!-- 保留原有参数,新增以下配置 -->
    <parameter name="allow204WithBody">true</parameter>
</transportReceiver>

保存配置后重启WSO2服务,即可让解析器兼容带响应体的204状态码。

方法2:通过中介流清除204响应体

在API的中介序列中添加处理逻辑,当后端返回204状态码时,自动清除响应体,符合HTTP规范:

<sequence name="Handle204Response" xmlns="http://ws.apache.org/ns/synapse">
    <filter source="$axis2:HTTP_SC" regex="204">
        <then>
            <!-- 设置无实体体标识 -->
            <property name="NO_ENTITY_BODY" value="true" scope="axis2"/>
            <!-- 清空响应体 -->
            <payloadFactory media-type="json">
                <format/>
                <args/>
            </payloadFactory>
        </then>
    </filter>
</sequence>

将该序列添加到对应API的outSequence中,确保响应返回客户端前完成处理。

内容的提问来源于stack exchange,提问作者CKR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 07:17:52