使用Nginx代理Ext.net2.0异步请求报错问题

场景:
Nginx反向代理请求内网web服务(IIS),使用的是http1.0协议,使用内网访问web服务器使用的是http1.1协议,web服务器上有coolite.net0.8(兼容http1.0)和ext.net2.0(可能不兼容http1.0,仅限http1.1)两种类型的页面。
表现:
1.使用内网(http1.1协议)可以正常访问coolite.net和ext.net页面。
2.使用代理只能访问coolite.net页面,ext.net页面报错。
3.不使用代理,web服务器单独部署,开放外网IP,从外网IP访问coolite.net和ext.net页面都正常。
报错信息:
假设:
coolite.net很早开发,相关的组件和模块的事件模型是基于http1.0的,ext.net最新版本的事件模型是基于http1.1的,所有通过nginx反向代理访问导致ext.net页面的事件模型解析错误而导致异常发生。
参考:
1.http1.0和http1.1差异:
2.ext.net bad respone error
验证:
现在需要论证ext.net2.0使用http1.0导致事件模型解析出错这结论,需要设计一个测试步骤如下:
1.编写一个ext.net2.0页面
2.本地模拟使用http1.0协议访问该页面,并观察结果
结果:
不是http1.0导致,问题在于post和get的区别,通过ext.net2.0的源码分析看出。nginx处理http post请求时,由于ext.net头部会加上x-ext.net:delta=true;用于表明请求是异步请求,否则将当作get处理。
而nginx对"."不识别,所以导致反向代理到web服务的转发会把x-ext.net:delta=true给过滤掉。
解决方案:
键    值
x-ext.net:delta=true
源码改为:
X-Ext.Net->X-Ext-Net
 
ext.net post头部:
 
ext.net get头部:
ext.net源码分析:
Coolite GET请求头部:
Coolite POST请求头部:
 
 
 
 
 





posted @ 2013-06-18 23:56  正在获取...  阅读(1082)  评论(0编辑  收藏  举报