分类:
2008-10-13 16:30:32
除虫记之十四:一个空格
我们的产品在很早的版本中采用了全新的登陆模式,使用http协议解决了原来有些网络不能登陆的问题,相关代码可以说久经考验,除了本地防火墙阻拦外,我们还没有发现不能登陆的情况。
但前两天,客服告诉我,XXX新闻办公室的领导们使用IG不能登陆了。原来我们公司在那儿做一个项目,顺便向他们的大小头头们推荐了我们的产品,各个领导对我们的产品很感兴趣,尤其是新闻订阅,经常使用这个功能。但不知什么原因,突然不能登陆了。客服的部门经理在mail中强调了他们处于政府的要害部门,影响力不比一般,并且把mail抄送给了公司老总。老总批示从快处理。
切,怎么可能不能登陆呢?我们还没有遇到这样的网络环境呢。仔细询问,并且让他们和新闻办的技术人员做了沟通,第二天回复说,他们的网络做了改动,做了新的防火墙,他们说可能是这个原因,但他们也说了,有的能登陆。
想了想,部门内所有人的开发都很紧张,耽误不得,还是亲自去吧。
和那边做项目的部门经理做了沟通,打车过去。晕,真是不一般,第一次来这样的地,各种国家机器一应俱全。登记后,让里面的人接进去。
简单沟通后,了解到,他们的网络有两种环境,一个是境内线,一个境外线,其中境内线是可以登陆的,境外线在改防火墙前也是可以登陆的,改了防火墙后就不能登陆了。
在一个处长的工位上测试了一下,果然是不能登陆,看样子是登陆过程中http提交超时。把数据拷贝到IE地址栏里面,靠,竟然可以登陆。ft,哪儿出了问题?
肯定是我们代码中的http协议实现有地方不标准。
他们的境外线除了各人用的就会议室里有一个,刚好里面有人在开会,等他们开完会,进去配好网络。在带日志模式下运行登陆,肯定是超时报网络出错;启动Ethereal,然后用IE登陆,抓包。
比较两个http数据包,发现很多不同,我们代码中采用Post协议,只添了一些必要的字段,IE采用Get协议,所有该有的字段可能都有了。
这就好办了,只需逐个的添加就知道怎么回事了。才做了这些工作,陪着我的我们公司同事,一个相当漂亮的女孩告诉我去吃中午饭,她给我要了一份午餐。不错,去考察政府的大锅饭什么档次。
午饭一般,10元的餐票,2个菜几两米。
回来在代码中把其他没有的字段一个一个的添加、编译、测试,要晕了!一路折腾下来,竟然都不成功!哪儿出了问题?难道协议不对?
换成GET方法,哈,就听硬盘声音不一样了,啊哈,成功了!ft,难道只有GET才放行?
重又用POST方法测试了几种情况,皆不成功,遂武断的做了不支持POST方法的决定。
打道回府,和张义臣讨论这个结论。张说不可能,如果这样,很多网页都不能浏览的,比如mail等。
他简单写了一个form,用POST方法把我们的数据提交,让我再去那个环境下做一次测试。
唉,厉害呀,如果我对HTML熟悉的话,在那儿直接做这个测试好了,就不用再跑一趟了。可惜不熟悉!
决定第二天再去一次。
联系了那个美女,约好一同去XXX新闻办。
到了那儿,立刻做了测试,我靠,真的可以耶~~~~,用Ethernet抓包,POST方法,各个字段正常。
这好办了呀,再重新对比这个数据包,修改我们的代码,所有的字段挨个的比较、编译、运行。
ft,一路下来,还是不行。
比较数据,瞪的我眼睛直冒火!
把自己的包抓下来,和IE的包比较,发给张,帮我比较。
他指出了几处不同,修正了,还是不行。
要晕了!
直至最后,数据上已经完全一样了,连大小写都一样了,还是不行。
tnnd,到底出了啥问题了?
后来,又发现一处不同,在Content-Length字段后面,我们的包是直接添的长度93,而IE在冒号后面加了一个空格又添的长度93。
难道这也有问题??
修正,编译,运行!
真够日的,通了!!!!!!!!!!!
这防火墙真TMD变态!难道就差这个空格?
遂把代码恢复到最初状态,只修改这个空格。通了!
天哪,真的是只差这个空格!这够日的防火墙,这不是要人命嘛!
唏嘘感慨一番,检查代码中所有相关的POST协议,都严格的加了空格,连大小写都不敢马虎!
教训:有的防火墙是有点变态,不过代码如果绝对规范标准,也是应该的!