问题描述:
用 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 做反向代理时的真实 IP
nginx多网站反向代理
使用Nginx搭建反向代理,图文并茂,附配置文件。
两边通过同一个nginx进行反向代理,nginx配置大致如下, location /health/ { proxy_pass http://192.168.40.159:8081/health/; #无问题的配置 } location /health-dev/ { proxy_pass ...
本资源是专门针对本博文的, nginx的反向代理的简单配置文件,给大家使用时做参考,拿走不谢,怎么一定要50字呢?
Nginx反向代理服务器配置基础教程
通过使用Nginx 反向代理来解决JS跨域问题 http://blog.csdn.net/mzhaocai/article/details/79238338
(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构建反向代理缓存服务器电子书,电子书很详细的介绍了nginx构建反向代理的过程与知识
3.找到D:\nginx\conf下nginx.conf文件用记事本打开 在文段末尾大括号前加上 include proxy.conf;(就是加载刚刚新建的那个文件(注意路径)) 4.进入cmd 进入D盘: d: 进到nginx文件夹下:cd nginx 启动nginx.exe:...
nginx1.6的安装 tomcat7的安装(包括jdk7) nginx+tomcat反向代理配置
nginx反向代理配置 动静分离不错的代理
此文比较详细讲述了Nginx与proxy共同搭建反向代理服务的配置方法
因此想使用nginx做为反向代理apache.整个配置安装过程很简单.在考虑高并发的情况下,在安装前就做了些优化.目前配置能抗住3000以上并发.好像不是特别大哦?呵~~ 但足以~~ 只是还有少量499问题..期待有人跟我讨论解决
尝试将 C2 隐匿于多级 nginx 反向代理关于利用多级 nginx 反代实现 beacon 上线的大致思路拓扑大致思路是这样,首先,我们会用一个 CS 的外
nginx反向代理教程, 腾讯应用宝平台支付接入必须步骤.
本文给大家分享的是nginx实现正向代理和反向代理的具体方法配置以及不同的实例情况,非常的详细,希望大家能够喜欢
Nginx搭建反向代理服务器,在如今大数据应用比较广泛的过程中, Nginx的应用也是及其重要的,尤其是搭建负载均衡服务器,反向代理等。
https服务器nginx反向代理配置,SSL连接下的域名访问应用服务器配置
解决配置Nginx反向代理后,可以通过域名访问Linux下部署的Tomcat,但却访问不到部署的项目问题