代理容不下的一个空格
在做一个语音云的代理,今天突然发现代理的最近的好几个版本都不能代理语音云了,客户端总是报告返回结果超时。
困惑,之前测试也没用报这方面的bug啊,功能是通过的啊,怎么到现在才爆出这样一个bug呢。
开始怀疑:
(1)由于在改变架构后的所有版本都有这个问题,开始怀疑改变架构时,功能就没有正确实现。可是,我清楚的记得,改变架构后,自己进行了测试,通过后才提交的版本啊。
(2) 由于我经常给测试自己编译的版本让他们测试,我又开始怀疑我编译的版本用到了一直没有传到svn上的代码。可这怎么可能呢,大哥?没次咱都是把代码提交完啊。但是,我还是努力地找回我删到回收站的代码,查看他们和现有代码的差异,没有什么收获。
(3)我也怀疑是服务器的木马病毒搞的鬼,因为最近服务器在闹毒。可是midomi和识别都没有问题啊?
(4)根据打屏可以看到,我的确将结果http转发给了客户端啊,可是客户端为什么没有收到呢?我有点儿怀疑iocp了(可感觉告诉我,要先怀疑自己啊)。我也联想到了上次LoadRunner报告超时是因为脚本中将接收的字节数写大了,导致它认为没有收完数据。(有点儿接近了,^_^)
最终结局:
抓包看,发现语音云的响应http中的有些头域竟然在值后面多了个空格,导致我自己生成的http的长度头域值比实际打了1。最终导致客户端认为我没有将完整的数据给它。
解释一下:代理对语音云的http处理逻辑是,收一个完整的http,解析处理,使用http解析结果生成一个http,转发给对端。
总结:
我必须承认,今天这个bug让我汗流不止,心跳不停,让我紧张地没有吃好晚饭。有bug怕什么,这不是也被咱解决了吗?