今天排查BUG遇到一个有趣的BUG,测试的截图显示chrome
这个BUG只在IE11下出现。浏览器
这个问题的缘由是keep-alive机制引发。
当浏览器在向一个网址发起请求时,会创建一个tcp/ip链接,以后发起的请求会复用这个链接。
可是这个链接有两个限制,就是链接超时时间和最大链接次数,超过了就会断开,下次再请求这个地址,会从新创建一个新的ttcp/ip链接。
在chrome和火狐下每次请求都会去验证这个tcp/ip链接是否有效,可是IE11不会,也就是说在临界点的时候,IE11去请求的话,此时未超时,那么还会复用原来的tcp/ip链接,可是此时服务端判断已经超时,那么就会废弃掉这个tcp/ip链接。
此时的这个请求就会出现BUG中那样的网络错误0x2ef3。网络
这个错误难以重现,而且不是代码的问题。
若是想规避这个错误,能够在服务端关闭keep-alive,可是客户端和服务端每次请求都须要创建一个tcp/ip链接,很显然不能因噎废食。
在网上看了一些人的解决办法是说加大timeout的时间,不过只要在那个超时的临界点发出这个请求仍是会出现这个问题。
也就是说到最后,最好的解决方案:
为了解决老板:加大timeout,伪装解决了这个问题。
为了避免再看到这个BUG:倡导别用IE。tcp