Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。这也正是工作时引入Hessian的一个重要原因,简单易配置。但是同样也有缺点,高版本对于低版本的向下兼容处理的并不好、一直流传一句话,“对于hessian,能不用高版本就不用高版本”,这句话充分说明了大家对于Hessian一些错误的困扰,那么下面总结一下最近遇到的Hessian相关的问题。
1、Nginx 使用反向代理时 Hessian的411错误
报错如下:
com.caucho.hessian.client.HessianConnectionException: 411:java.io.IOException: Server returned HTTP response code: 411 for URL:http://xxxx/xxx/xxxService
排查过程:刚一开始发现报错时,以为是server端返回的报错,还跑去问server端是不是报错了。。。后来了解到server端添加了nginx代理,不再支持绑定ip直连接口的方式。通过查资料发现Hessian在Nginx反向代理的情况下存在问题。
问题原因:
首先来看下
HTTP 411
错误的解释:
Length Required
服务器不能处理请求,除非客户发送一个
Content-Length
头。(
HTTP 1.1
新)这是因为
Hessian
与服务端通信默认是采取分块的方式
(chunked encoding)
发送数据,而反向代理要获得
Content-Length