有反向代理( Nginx )时 Hessian 的 411 错误解决方案
来源:互联网 发布:淘宝大数据在哪里看 编辑:程序博客网 时间:2024/05/17 03:46
Hessian 是个轻量级的跨平台的远程过程调用框架(RPC)。我在目前的项目中使用其 java 服务器端和 iOS 客户端(HessianKit)。
在项目开发过程中 HessianKit 能顺利的从服务器获取数据,但是在公司外网测试环境中就会得到 411 的错误代码。经查找该问题发生在 Nginx,因为在开发环境中客户端直接连接 Tomcat,而在测试环境中则有 Nginx 作负载均衡。
原因:
首先来看下HTTP 411错误的解释: LengthRequired 服务器不能处理请求,除非客户发送一个Content-Length头。(HTTP 1.1新)这是因为Hessian与服务端通信默认是采取分块的方式(chunked encoding)发送数据,而反向代理要获得Content-Length这个头,才能处理请求,但是Hessian的请求中并没有加入这个参数。【引自博客A】
博客A中对该问题的解决方案是调用 HessianProxyFactory 实例的setChunckedPost() 方法,赋值为false,让其不采用分块传输。不过这样的方案并不适合我,因为我用的是 iOS 平台的 Hessian 客户端 HessianKit 。而 HessianKit 并没有提供这个接口。据我对 HessianKit 源码的简单了解,它采用 NSMutableURLRequest 来进行网络访问,而 iOS SDK 中也并没有提供设置是否分块的功能。因此对我来说最好从 Nginx 端来解决,也是为了多平台的考虑,不希望以后每个客户端都去折腾一遍。
解决方案:
最终通过【博客B】找到解决方案,通过加入新的模块,重新编译并配置 Nginx,完美解决。
我将编译步骤记录在了我的另一篇博客中,详细请参考【我的博客】
参考博客:
【博客A】http://blog.csdn.net/zhtang0526/article/details/4793157
【博客B】http://blog.chinaunix.net/uid-16974460-id-296023.html
【我的博客】http://blog.csdn.net/fangzhangsc2006/article/details/8122273
- 有反向代理(Nginx)时Hessian的411错误解决方案
- 有反向代理( Nginx )时 Hessian 的 411 错误解决方案
- Nginx 使用反向代理时Hessian 的 411 错误解决方案
- hessian在反向代理下的 http 411 错误
- Nginx使用反向代理时Hessian411错误解决方案(转)
- nginx 反向代理时丢失端口的解决方案
- nginx 反向代理时丢失端口的解决方案
- nginx 反向代理 出现HTTP 411错误
- nginx 反向代理 504 错误
- nginx的反向代理
- nginx的反向代理
- Nginx的反向代理
- nginx的反向代理
- Nginx反向代理404错误和500错误的随笔
- iptables导致nginx反向代理不可用的解决方案
- 前端跨域,nginx反向代理的解决方案
- nginx的proxy配置(反向代理)
- 关于servlet的重定向在有nginx反向代理时出错的解决方法
- 在ubuntu12.04 LTS下使用Ant编译Android项目
- JBPM4中常用概念总结
- Google App Engine简介
- Linux进程学习五 wait()和waitpid()(tigerjb)
- JS的正则表达式
- 有反向代理( Nginx )时 Hessian 的 411 错误解决方案
- TWI一线主管实战技能训练
- 做过的一个SSH+prototype.js+json=Ajax的例子
- ini_set用法
- Spring中的BeanPostProcessor接口
- Google App Engine使用简介
- java web
- 通过简单示例来了解Struts流程
- 爱上你之前,爱对我来说多么遥远:伤感日志