【问题标题】:Why do user agents / browsers lie为什么用户代理/浏览器会撒谎
【发布时间】:2014-12-12 02:08:49
【问题描述】:

我已经阅读了几篇关于特征检测的文章,并且它比浏览器检测更可靠,因为浏览器会撒谎。

我找不到任何关于他们为何撒谎的信息。有谁知道他们这样做的原因?

【问题讨论】:

    标签: browser browser-detection browser-feature-detection


    【解决方案1】:

    据我了解,网站管理员会通过浏览器嗅探来查找浏览器的功能并限制他们向浏览器发送的内容。如果浏览器谎报其功能,他们将从网站管理员那里获得更多信息,您可以阅读更多内容:

    http://farukat.es/journal/2011/02/499-lest-we-forget-or-how-i-learned-whats-so-bad-about-browser-sniffing

    http://webaim.org/blog/user-agent-string-history/

    【讨论】:

    • 浏览器不会对自己的功能撒谎。但是您可以通过任何开发人员工具更改用户代理字符串。或者......用户代理字符串的变体如此之多,不可能保留具有适当功能的浏览器/设备组合的有效数据库。如果操作系统升级并且现在突然功能 X 工作怎么办?这么多场景。这就是为什么特征检测是正确的方法。他们不能对此撒谎,只会错误地实现功能。
    • 您能否提供一些信息来源?我的第一个来源来自 Modernizr(特征检测)的创建者 Faruk Ates,他说“UA 嗅探的最大问题是“UA”部分,因为浏览器会撒谎。很多。他们从 Microsoft Internet Explorer 2.0 的发布开始撒谎,并且他们一直在撒谎。浏览器一直在谎报他们是谁以及他们能做什么。如果没有你的进一步证明,我更倾向于相信他。
    • 当 Edge 浏览器用户代理字符串包含诸如“Mozilla”、“Safari”、“Chrome”和“Gecko”之类的内容时,这些都是谎言。所有浏览器都这样做。
    【解决方案2】:

    原因很简单:

    因为网站查看用户代理字符串并对浏览器做出假设,当浏览器更新到新版本时,这些假设将无效。

    这几乎从网络诞生开始就一直在发生。浏览器供应商不希望他们的新版本破坏网络,因此他们调整 UA 字符串以欺骗现有网站上的代码。

    最终,如果每个人都负责任地使用 UA 字符串,并在新的浏览器版本出现时更新他们的网站,那么浏览器就不需要撒谎了。但你必须承认,这要求很高。

    功能检测效果更好,因为当新的浏览器版本带有该功能时,检测会自动检测它,而无需浏览器或网站所有者执行任何特殊操作。

    当然,有时功能检测无法完美运行——例如,如果某个功能存在,但在特定浏览器中存在错误。在这种情况下,是的,您可能希望将浏览器检测作为后备。但在大多数情况下,特征检测是更好的选择。

    【讨论】:

      【解决方案3】:

      另一个更现代的原因是避免安装移动应用程序的需求(产品所有者可以控制我对内容能做什么和不能做什么。不用了!)。

      今天 Reddit 开始阻止查看 subreddit,以防他们在 UserAgent 中检测到移动浏览器,所以我不得不更改它才能查看内容。

      【讨论】:

        猜你喜欢
        • 2013-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多