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

OSB 12c禁用分块流模式仍返回chunked编码,需保留Content-Length

解决OSB 12c禁用分块流模式后仍设置Transfer-Encoding: chunked的问题

我之前在处理OSB 12c项目时遇到过完全一样的问题,给你几个经过验证的解决方案,你可以逐一尝试:

1. 彻底检查业务服务的HTTP传输配置

有时候看起来禁用了分块模式,但可能有其他隐式配置在起作用:

  • 打开目标业务服务的配置页面,进入HTTP Transport标签
  • 确认Use Chunked Streaming Mode确实被设置为No
  • 同时检查Content-Length相关的配置项:部分版本里需要手动开启Send Content-Length Header(如果有该选项)
  • 保存配置后重启对应的OSB服务器节点,确保配置完全生效

2. 通过流水线手动控制响应头

如果配置层面不生效,可以在业务服务对应的流水线里强制修改响应头:

  • 在流水线的Response Stage中添加一个Assign动作
  • 使用XQuery计算响应体的长度,示例代码:
    fn:string-length($body)
    
  • 将计算结果赋值给$outbound/ctx:transport/ctx:response/tp:headers/Content-Length
  • 再添加一个Delete动作,移除$outbound/ctx:transport/ctx:response/tp:headers/Transfer-Encoding
  • 这样能确保响应头只包含Content-Length,不会被分块编码覆盖

3. 配置响应头覆盖规则

如果后端服务本身返回了Transfer-Encoding: chunked头,OSB会默认转发,这时候需要在业务服务里配置头覆盖:

  • 进入业务服务的HTTP Transport标签,找到Response Header Processing部分
  • 设置Overwrite Response Headers为Yes
  • 在Response Headers列表中添加Transfer-Encoding并设置为空值,或者直接添加Content-Length并指定预期值(如果能提前确定的话)
  • 这样OSB会强制替换后端返回的响应头

4. 检查并应用Oracle官方补丁

这个问题在OSB 12c的特定版本里属于已知bug,Oracle已经发布了对应补丁:

  • 对于12.1.3版本,可查找编号为20806544的补丁(具体以Oracle官方支持文档为准)
  • 对于12.2.1.2版本,对应的补丁编号是25055537
  • 应用补丁后重启OSB集群,通常能彻底解决配置不生效的问题

如果以上方法都不奏效,可以尝试启用OSB的HTTP传输日志,查看请求和响应头的完整流转过程,定位是哪个环节添加了Transfer-Encoding: chunked头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:15:21