使用 Safari 浏览器浏览 IIS6 网站时“崩溃”

使用 Safari 浏览器浏览 IIS6 网站时“崩溃”

我有一个在 IIS 6.0 上使用 ASP.NET 4.0 Webforms 的应用程序,已经运行多年了。最近对该应用程序的部署导致 Safari 浏览器(不是任何其他浏览器)中出现一些非常随机(对我们来说)的间歇性问题。

服务器重启后,应用程序在一段时间内似乎运行良好,但随后就会“崩溃”。

它是 100% 服务器级别的,因为它在所有计算机上都能正常工作,直到它“崩溃”。一旦崩溃,它就会在运行该版本 Safari 的每台计算机上崩溃。如果您更改 Safari 版本,或在 http 和 https 之间切换,它将再次工作,直到该版本“崩溃”

看起来,这种中断与发送到服务器的标头有关。

一旦“损坏”,它将无法将 CSS 应用于 ASP.NET 控件,addhistory 方法会抛出 javascript 错误,因为它找不到 __dopostback 函数。

答案1

答案见于:https://stackoverflow.com/questions/5478181/net-4-0-website-cannot-identify-some-applewebkit-based-browsers

“我似乎找到了问题的根源。UserAgent -> BrowserCaps 解析机制使用缓存来临时存储映射。不幸的是,它(默认情况下)使用 UserAgent 字符串的前 64 个字符作为缓存键,这简直是胡说八道……偶尔会弹出一个看起来像 Safari 的用户代理,但实际上不是,并且该代理未正确解析(Mozilla 0.0),但映射仍存储在缓存中,这意味着所有具有相同 64 个字符前缀的 UserAgent 字符串现在也被错误映射,直到该缓存条目过期(滑动窗口为 1 分钟)。幸运的是,用于缓存的密钥长度可以通过以下方式配置

<browserCaps userAgentCacheKeyLength="..." />

在配置部分。

我已将密钥长度增加到 256,自此问题就消失了。现在,我将尝试找出哪个 UserAgent 字符串是导致缓存中毒的罪魁祸首 - 如果我发现任何问题,我将更新此帖子。”

相关内容