`
fancyboy2050
  • 浏览: 241353 次
  • 性别: Icon_minigender_1
  • 来自: 皇城根儿下
社区版块
存档分类
最新评论

hessian http response code:411

阅读更多
记录一个很久以前的遇到的一个关于hessian的问题。

用 Hessian 实现 web service 过程中,需要创建对象时,是使用 HTTP POST 方法来传递数据的。但是在有反向代理 (nginx) 的情况下,会抛出异常 (com.caucho.hessian.client.HessianConnectionException: 411:java.io.IOException: Server returned HTTP response code: 411 for URL:http://xxxx/xxx/xxxService) 。

首先来看下 HTTP 411 错误的解释: Length Required 服务器不能处理请求,除非客户发送一个 Content-Length 头。( HTTP 1.1 新)这是因为 Hessian 与服务端通信默认是采取分块的方式 (chunked encoding) 发送数据,而反向代理要获得 Content-Length 这个头,才能处理请求,但是 Hessian 的请求中并没有加入这个参数。

我们使用的spring+hessian做服务化:
hessian自己的factory生成对象时:
com.caucho.hessian.client.HessianProxyFactory中,默认ChunkedPost为true
    private boolean _isChunkedPost = true;
分块发送方式与服务端交换数据的参数,但是暂时nginx不支持


使用的spring的proxyfactorybean对象有一个setChunkedPost的方法,所以我们可以在配置bean的时候给chunkedPost设置为false,从而透过nginx,实现通信
<bean id="xxx" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
        <property name="serviceUrl" value=""/>
        <property name="serviceInterface" value=""/>
    	<property name="chunkedPost" value="false"/>
    </bean>
分享到:
评论
1 楼 悦悦余音 2016-04-05  
楼主妙笔生花的文章解决了我的问题  

相关推荐

Global site tag (gtag.js) - Google Analytics