遇到一起奇怪的IE問題。
User回報使用某ASP.NET網頁出錯,問題發生在使用者按下送出鈕後,ASP.NET網頁進行PostBack,但沒多久IE 8彈出DNS Error:
無法顯示網頁。找不到伺服器或 DNS 錯誤。
The page cannot be displayed. Cannot find server or DNS Error.
這問題最吊詭的地方在於: 前後都是同一支ASP.NET程式,若真因DNS有誤找不到網站,怎麼會先GET正常顯示網站,卻在POST時回報找不到該網站?
使用Fiddler追蹤後,發現該網頁PostBack耗時較久,1分多鐘才會傳回結果,而使用馬錶計時,IE只等了約10秒就彈出找不到伺服器錯誤! 為了驗證此問題會發生在每個耗時較久的網頁,我做了一個簡單的測試網頁,PostBack時Thread.Sleep(30*1000),等待30秒再Response.Write(),使用問題IE測試,得到同樣結果 — IE等了10秒,接著彈回找不到伺服器錯誤!
同事找到一則微軟KB,提供重要線索 -- 當網站傳回資訊耗時過久,IE有可能出現"無法顯示網頁。找不到伺服器或 DNS 錯誤。"。有趣的是: 1) 為何錯誤訊息不是連線逾時而是DNS錯誤? 2) IE8的預設逾時設定為60分鐘,10秒彈出錯誤是哪招?
依KB所說,找出ReceiveTimeout Registry設定,發現問題機器的設定值為10,000,相當於10,000ms,跟先前觀察到的10秒完全吻合,至此真相大白!!
但是,為什麼它會被修改成10秒??
嗯,跟大家想的一樣,使用者指出對於此事完全不知情! 擔心刑求逼供會傷了皇城之內的和氣,本案到此終結。