1. 程式人生 > >【IE11請求中止】 XMLHttpRequest: 網路錯誤 0x2ef3的意外出現

【IE11請求中止】 XMLHttpRequest: 網路錯誤 0x2ef3的意外出現

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。