【问题标题】:How to clear cached user agents如何清除缓存的用户代理
【发布时间】:2017-02-26 23:38:50
【问题描述】:

我最初的问题是我的网站仅在某些 iPhone 和 iPad 设备上出现回发错误。该网站适用于所有台式电脑以及大多数其他手机。该错误是特定于设备的,而不是特定于浏览器的。我在以下讨论中找到了答案-

.Net 4.0 website cannot identify some AppleWebKit based browsers

ASP.NET Ajax postback suddenly stops on IPhone/IPad

这些讨论的要点是-

“.NET 框架缓存用户代理密钥。 用户代理缓存的默认大小为 64 个字符。这意味着,.NET 将 UserAgent 字符串的前 64 个字符作为键缓存。因此,下次用户 UA 以相同 64 个字符开头的用户访问该站点时,它会映射到内存中先前存储的密钥。该网站现在对这个新用户代理的行为方式相同。

在大多数情况下,这不是问题,但偶尔会弹出一个看起来像 Safari 的用户代理,但实际上并非如此,并且没有正确解析(Mozilla 0.0 没有任何功能),但是映射仍然存储在缓存中,这意味着所有具有相同 64 个字符前缀的 UserAgent 字符串(恰好与许多普通 Safari 的前缀完全相同)现在也被错误地映射,直到该缓存条目过期。”

添加用户代理长度为 256 的 browserCaps 解决了某些设备的问题,但不适用于在 ipad/iphone 上使用 chrome 和 safari 的设备。

有没有办法清除这些缓存的用户代理?清除两个浏览器上的浏览器缓存似乎不起作用。

【问题讨论】:

    标签: ios asp.net ipad caching user-agent


    【解决方案1】:

    在网上做了一些挖掘之后,我找到了清除这个缓存的方法-

    来源:https://msdn.microsoft.com/en-us/library/ms228122(v=vs.85).aspx

    对位于 App_Browsers 目录中的 .browser 文件的更改使缓存无效,下一个请求将导致应用程序重新编译。

    但是,如果对 .browser 文件中的 %SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers 目录, 您必须使用 %SystemRoot%\Microsoft.NET\Framework\version\aspnet_regbrowsers.exe 工具手动重新编译应用程序, 或者您必须使用 BrowserCapabilitiesCodeGenerator 类以编程方式重新编译它。

    它没有指定您应该进行哪些更改,但我假设任何外部更改都会强制它重新编译。我还没有对此进行测试,只是想把它放在这里以防有人尝试过。

    【讨论】:

      猜你喜欢
      • 2013-05-07
      • 2015-11-12
      • 1970-01-01
      • 2014-11-25
      • 2014-10-23
      • 2012-02-05
      • 1970-01-01
      • 2018-09-21
      • 1970-01-01
      相关资源
      最近更新 更多