记录一个很久以前的遇到的一个关于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>
分享到:
相关推荐
Hessian是一种轻量级的二进制远程过程调用(RPC)协议,它基于HTTP,并且通常通过Servlet来暴露Web服务。Hessian的设计目标是为了提供高效、简单的远程调用方式,使得客户端能够像调用本地方法一样调用远程服务。 *...
这个压缩包包含了Hessian的多个版本,分别是Hessian3.1.6、Hessian3.2.1以及Hessian4.0.7。每个版本都有其特定的功能改进和优化,了解这些版本的区别和适用场景对于开发者来说至关重要。 Hessian3.1.6是Hessian的一...
Java Hessian远程调用是一种高效的、轻量级的RPC(Remote Procedure Call)解决方案,它允许Java应用程序通过网络进行跨语言的通信。Hessian是BEA Systems开发的一种二进制Web服务协议,它提供了序列化和远程方法...
com.alibaba:hessian-lite:jar:3.2.1-fixed-2 hessian-lite hessian-lite-3.2.1-fixed-2.jar
Hessian是一种二进制Web服务协议,它提供了一种高效的序列化和远程调用机制,常用于分布式系统中。在本项目中,我们探讨的是基于C#实现的Hessian服务端和客户端,已经在IIS环境下进行了测试并成功通过。 1. **...
在Spring框架中集成Hessian是为了实现远程方法调用(Remote Method Invocation, RMI),这是一种轻量级的序列化协议,可以高效地传输Java对象。Hessian使得服务提供者和服务消费者之间能够通过网络进行快速的数据...
总结来说,"dubbo-hessian协议http请求demo"这个示例主要展示了如何在Java环境中利用Dubbo的Hessian协议进行服务间的HTTP通信。通过理解Hessian协议的特性,我们可以实现高效、简洁的远程方法调用,提升分布式系统的...
Hessian是Caucho公司开发的一种基于HTTP的二进制协议,它能够将Java对象序列化为二进制流,从而减少网络传输的数据量。相比基于XML的SOAP协议,Hessian具有更快的速度和更小的带宽占用。在分布式环境中,Hessian服务...
Hessian协议基于HTTP协议,但其数据传输采用二进制格式,这使得它在数据传输效率上远超基于文本的XML或JSON协议。Hessian支持多种类型的数据序列化,包括基本类型、对象、数组、日期等,并且能够自动处理Java和.NET...
Hessian是一种高效的二进制序列化协议,常用于实现轻量级的远程过程调用(RPC)。这个案例涉及到了Hessian在Java和Python之间的跨语言通信。以下是对Hessian技术及其应用的详细解释: 1. **Hessian简介**:Hessian...
hessian是一个轻量级的Java Remoting方案
Hessian协议是http://caucho.com/公司开发的一种实用的web服务技术,它采用二进制数据,传输效率比较高,简单易用,是C#.NET/IIS环境快速开发web服务应用的一种解决方案。本资源中包含Hessian协议的C#版源代码,由于...
Hessian是一种轻量级的RPC(远程过程调用)协议,它基于HTTP并采用二进制编码,旨在提高网络服务之间的通信效率。Hessian由Caucho Technology开发,主要用于Java和.NET平台,但也有其他语言的实现。在这个压缩包中,...
2. **Hessian Service**:服务端需要实现Hessian服务,通常会将业务逻辑封装在接口中,然后通过HessianServlet暴露这些接口,使得客户端可以通过HTTP请求访问。 3. **Hessian Serializer**:负责对象的序列化和反...
Hessian是一种二进制协议,它允许Java和.NET应用程序之间进行高效的远程方法调用(RMI)。这个协议基于HTTP,可以用于跨语言、跨平台的服务交互。Hessian提供了序列化和反序列化的机制,使得对象可以被编码为字节流...
创建Hessian服务端时,需要将服务绑定到一个特定的URL,这样客户端才能通过HTTP请求找到并调用这些服务。这通常通过HessianServlet实现,将服务注册到Servlet容器(如Tomcat)中,配置在web.xml文件里。 4. **服务...
Hessian是一种二进制Web服务协议,由Caucho Technology公司开发,主要用于提供轻量级、高效的远程方法调用(Remote Method Invocation, RMI)机制。它结合了HTTP协议的可扩展性和Java序列化机制的易用性,使得在...
在Spring框架中,Hessian是一种轻量级的远程方法调用(RPC)协议,它能够实现Java对象到字节流的序列化,从而使得服务端的对象可以在客户端直接调用,仿佛对象就在本地一样。Hessian提供了高效的二进制RPC协议,使得...
**Hessian:一种二进制Web服务协议** Hessian是一种高效的二进制RPC(远程过程调用)协议,常用于Web服务。它是由Caucho Technology开发的,目的是为了提高XML-based的Web服务如SOAP的性能。Hessian通过使用二进制...
Spring MVC 和 Hessian 整合是企业级应用中常见的技术组合,主要用于构建分布式服务。Spring MVC 是一个基于模型-视图-控制器(MVC)设计模式的轻量级 web 框架,而 Hessian 是一种高效的远程方法调用(RPC)协议,...