使用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请求头部:
 
 
 
 
 



相关文章
相关标签/搜索