今天排查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