您的位置:首页 > 运维架构 > Nginx

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

2013-06-18 23:56 393 查看
场景:
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差异:
http://blog.csdn.net/elifefly/article/details/3964766;
2.ext.net bad respone error
http://forums.ext.net/showthread.php?1046-SOLVED-Coolite-Error;
http://forums.ext.net/showthread.php?1087-CLOSED-AjaxMethod-Error-BADRESPONSE-Syntax-error&s=f1aa70d8e8558ac030dd8fb3078cb829;
http://forums.ext.net/showthread.php?15563-When-trying-to-call-an-ASP-NET-method-through-DirectEvents-get-BADRESPONSE-Syntax-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请求头部:











来自为知笔记(Wiz)Time=2013-06-08 15:23:38
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: