BUG現象 今天排查BUG遇到一個有趣的BUG,測試的截圖顯示 這個BUG只在IE11下出現。 BUG原因 這個問題的原因是keep alive機制引起。 當瀏覽器在向一個網址發起請求時,會建立一個tcp/ip連接,之後發起的請求會復用這個連接。 但是這個連接有兩個限制,就是連接超時時間和最大連接次 ...
BUG現象
今天排查BUG遇到一個有趣的BUG,測試的截圖顯示
這個BUG只在IE11下出現。
BUG原因
這個問題的原因是keep-alive機制引起。
當瀏覽器在向一個網址發起請求時,會建立一個tcp/ip連接,之後發起的請求會復用這個連接。
但是這個連接有兩個限制,就是連接超時時間和最大連接次數,超過了就會斷開,下次再請求這個地址,會重新建立一個新的ttcp/ip連接。
在chrome和火狐下每次請求都會去驗證這個tcp/ip連接是否有效,但是IE11不會,也就是說在臨界點的時候,IE11去請求的話,此時未超時,那麼還會復用原來的tcp/ip連接,但是此時服務端判斷已經超時,那麼就會廢棄掉這個tcp/ip連接。
此時的這個請求就會出現BUG中那樣的網路錯誤0x2ef3。
BUG解決方案
這個錯誤難以重現,並且不是代碼的問題。
如果想規避這個錯誤,可以在服務端關閉keep-alive,但是客戶端和服務端每次請求都需要建立一個tcp/ip連接,很顯然不能因噎廢食。
在網上看了一些人的解決辦法是說加大timeout的時間,不過只要在那個超時的臨界點發出這個請求還是會出現這個問題。
也就是說到最後,最好的解決方案:
為瞭解決老闆:加大timeout,假裝解決了這個問題。
為了不再看到這個BUG:倡導別用IE。