问题描述:
用 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 的请求中并没有加入这个参数。
解决方法:
com.caucho.hessian.client.HessianProxyFactory 类中,有一个 boolean _chunckedPost 的域成员,其默认值为 true 。这个值就是规定 Hessian 是否以分块发送的方式与服务端交换数据的参数,因此在创建com.caucho.hessian.client.HessianProxyFactory 的对象后(假设为 factory ),只要调用其上的setChunckedPost() 方法,把这个属性设置为 false 即可。即 factory.setChunkedPost(false);
分块编码传输:
分块编码 (chunked encoding) 传输方式是 HTTP 1.1 协议中定义的 Web 用户向服务器提交数据的一种方法,当服务器收到 chunked 编码方式的数据时会分配一个缓冲区存放之,如果提交的数据大小未知,客户端会以一个协商好的分块大小向服务器提交数据。
The content can be broken up into a number of chunks; each of which is prefixed by its size in bytes. A zero size chunk indicates the end of the response message. If a server is using chunked encoding it must set the Transfer-Encoding header to "chunked".
Chunked encoding is useful when a large amount of data is being returned to the client and the total size of the response may not be known until the request has been fully processed. An example of this is generating an HTML table of results from a database query. If you wanted to use the Content-Length header you would have to buffer the whole result set before calculating the total content size. However, with chunked encoding you could just write the data one row at a time and write a zero sized chunk when the end of the query was reached.
如果不使用 Chunked encoding 传输方式,需要将要发送的数据缓存下来,计算出 content-length ,从而满足反向代理( Nginx )需要 content-length 的要求。
转自:http://www.oschina.net/question/54100_20352
分享到:
相关推荐
nginx多网站反向代理
【Nginx 配置反向代理】 在服务器运维中,遇到高并发访问的压力时,Apache 服务器可能无法单独应对。在这种情况下,可以利用 Nginx 的反向代理功能来分担压力,优化服务器架构。Nginx 以其轻量级、高性能的特点,常...
在IT行业中,构建高效、可扩展的Web服务是至关重要的,而`nginx`和`tomcat`的结合使用就是一种常见的解决方案。`nginx`作为一款高性能的反向代理服务器和负载均衡器,常用于处理静态资源,而`tomcat`则作为Java应用...
本文将深入探讨“Nginx做反向代理时如何获取真实IP”的主题,这对于网站日志分析、安全监控以及实现个性化服务至关重要。 Nginx是一款流行的开源HTTP服务器,常用于反向代理、负载均衡和缓存服务。反向代理是指...
在网络安全领域,C2(Command and Control)服务器是用来...总之,通过多级 Nginx 反向代理隐藏 C2 服务器是一种有效的混淆技巧,但实施时需要谨慎操作,确保每个环节的配置正确无误,以实现安全、隐蔽的 C2 控制通道。
两边通过同一个nginx进行反向代理,nginx配置大致如下, location /health/ { proxy_pass http://192.168.40.159:8081/health/; #无问题的配置 } location /health-dev/ { proxy_pass ...
通过使用Nginx 反向代理来解决JS跨域问题 http://blog.csdn.net/mzhaocai/article/details/79238338
因为架构的需要采用多级 Nginx 反向代理,但是后端的程序获取到的客户端 IP 都是前端 Nginx 的 IP,问题的根源在于后端的 Nginx 在 HTTP Header 中取客户端 IP 时没有取对正确的值。 同样适用于前端是 Squid 或者...
本文将详细介绍Nginx如何实现正向代理和反向代理,以及这两种代理方式的应用场景。 **正向代理** 正向代理的主要作用是让内部网络中的设备(如服务器B)通过一个具有外部网络访问权限的设备(如服务器A)来访问...
### Windows 下配置 Nginx 反向代理 Tomcat 在 Windows 环境下配置 Nginx 作为 Tomcat 的反向代理服务器是一项常见的任务,主要用于实现负载均衡、提高安全性及提升性能等目的。本文将从下载 Nginx 开始,详细介绍...
本资源是专门针对本博文的, nginx的反向代理的简单配置文件,给大家使用时做参考,拿走不谢,怎么一定要50字呢?
### Nginx反向代理服务器配置基础教程 #### 一、系统架构 在现代Web服务部署中,Nginx作为一款高性能的HTTP和反向代理Web服务器,被广泛应用于负载均衡、反向代理以及静态资源服务等多个场景。本文将详细介绍如何...
### Nginx反向代理不能访问项目的解决办法 在配置Nginx作为反向代理服务器时,有时会遇到可以通过域名正常访问Linux系统下部署的Tomcat服务器,但是却无法访问到部署在Tomcat上的具体项目的情况。这种情况通常是...
(1)使用Nginx反向代理,根据访问的路径跳转到不同端口的服务中,Nginx监听端口为8001。 访问 http://127.0.0.1:9001/deu/ 直接跳转到127.0.0.1:8016 访问 http://127.0.0.1:9001/vod/ 直接跳转到127.0.0
网上找到的nginx反向代理配置文件通常只能通过80端口进行访问,映射到其他端口时系统可能获取不到,经过找资料以及试验,找到了能够解决的配置方法。
Nginx构建反向代理缓存服务器电子书,电子书很详细的介绍了nginx构建反向代理的过程与知识
许多知名的网站如淘宝、新浪博客、网易新闻等都使用了Nginx作为他们的Web服务器或反向代理服务器,以确保网站的高可用性和良好的用户体验。在国内,Nginx的应用同样广泛,众多大型网站都选择了Nginx,它逐渐成为市场...
nginx反向代理配置 动静分离不错的代理
此文比较详细讲述了Nginx与proxy共同搭建反向代理服务的配置方法