我今天从 WSO2 ESB 4.5.1 升级到 4.7.0 时遇到了这个问题。我在 4.5.1 上遇到了另一个问题,因此我必须升级,所以在 4.7.0 上遇到这个问题时,我别无选择,只能解决它。
想了一会儿,我记得在4.6.0中默认传输从NHTTP切换为Passthrough以提高性能。 4.7.0 附带了这两种配置,但默认启用 PT。配置文件位于 axis2 目录中:
${carbon.home}/repository/conf/axis2/
PT 配置文件是axis2_pt.xml
。 NHTTP 是axis2_nhttp.xml
。您可以比较它们以了解发生了什么变化;幸运的是,差异非常干净。
您可以通过修改主配置文件轻松从 PT 切换到 NHTTP:
${carbon.home}/repository/conf/carbon.xml
在那里你有<ConfigurationFile>
下的元素<Axis2Config>
。默认文件,axis2.xml
似乎或多或少是一个副本axis2_pt.xml
。要切换到 NHTTP,只需更改<ConfigurationFile>
to ${carbon.home}/repository/conf/axis2/axis2_nhttp.xml
.
切换到 NHTTP 解决了 ESB 4.7.0 无法正确处理 100 CONTINUE 的问题。具体来说,我尝试使用curl 通过 ESB 将 PDF 上传到另一个服务。使用PT,失败;使用NHTTP,效果很好。我的明显结论是 PT 在这种情况下根本就是有问题的。
根据我对 PT 与 NHTTP 的阅读,从一种切换到另一种的唯一“官方”副作用是 PT 在某些情况下应该更快。然而,NHTTP 已经存在了更长时间,因此可能会因为经历了更多的错误修复而变得更加可靠。我不确定这一点,因为我没有参与 WSO2 ESB 的开发,但这是一个有根据的猜测。 :)
我也很想对 Isuru Perera 的答案发表评论,但我没有必要的声誉,所以我担心我必须花两分钱https://wso2.org/jira/browse/APIMANAGER-1007这里。这个问题似乎确实相关 - 特别是根据我今天使用curl的经验 - 但不幸的是,WSO2的好心人在发表了一些评论后将这个问题解决为“不是错误”,最终建议避免使用curl,因为其他客户端“按预期工作”,从而使这是一个“卷曲问题”。恕我直言,HTTP 规范兼容请求的行为损坏不是客户端问题,应该得到解决。这实际上导致 PT 传输在某些情况下无法使用 - 即客户端对于如何 POST 大型实体更加智能的情况。这确实是一种耻辱,因为不需要解析请求正文的场景正是 PT 传输的设计目的,也是它应该擅长的地方!
哦,这是我在 stackoverflow 上的第一篇文章,所以如果我违反了任何内部规则,我很抱歉;我已经成为被动参与者一段时间了,所以我希望我没有做任何错事!