使用 Safari 瀏覽器查看 IIS6 網站時“中斷”
我有一個在 IIS 6.0 上使用 ASP.NET 4.0 Webforms 的應用程序已經執行多年。最近對該應用程序的部署在 Safari 瀏覽器(而不是任何其他瀏覽器)中導致了一些非常隨機的(對我們而言)間歇性問題。
伺服器重新啟動後,應用程序似乎可以正常工作一段時間,但隨後會“中斷”。
它是 100% 伺服器級別的,因為它可以在所有電腦上找到,直到它“崩潰”。一旦損壞,它將在執行該確切版本 Safari 的每台電腦上損壞。如果您更改 Safari 版本,或在 http 和 https 之間切換,它將再次工作,直到該版本“中斷”
似乎中斷與發送到伺服器的標頭相關聯。
一旦“損壞”,它就會出現將 CSS 應用於 ASP.NET 控制項的問題,addhistory 方法會引發 javascript 錯誤,因為它找不到 __dopostback 函式。
“看來我找到了問題的根本原因。UserAgent -> BrowserCaps 解析機制使用記憶體來臨時儲存映射。不幸的是,它(預設情況下)使用 UserAgent 字元串的前 64 個字元作為記憶體鍵,那就是只是 BS… 偶爾會彈出一個看起來像 Safari 的使用者代理,但實際上不是,並且沒有正確解析(Mozilla 0.0),但映射仍然儲存在記憶體中,這意味著所有 UserAgent 字元串相同的 64 個字元前綴現在也被錯誤映射,直到該記憶體條目過期(滑動視窗為 1 分鐘)。幸運的是,用於記憶體的密鑰長度可以配置為
<browserCaps userAgentCacheKeyLength="..." />
在配置部分。
我已將密鑰長度提高到 256,此後問題就消失了。現在,我將首先嘗試找出哪個 UserAgent 字元串導致記憶體中毒——如果我發現任何東西,我會更新這篇文章。”