我认为这取决于你的动机是什么。例如,在移动网络领域,您尝试做的是为用户提供在他们的平台上看起来合理的东西。为什么要关心用户报告的是什么用户代理,而这纯粹是为了他们自己的利益?如果他们试图用不同的用户代理来欺骗你,那么他们是唯一受苦的人。主要的麻烦当然是误报。它并不完全可靠。
我认为您不应依赖它,但移动开发人员正受到此类泛泛声明的攻击。是的,有很多不错的选择,但在您能想象到的所有浏览器中,随着确定性开始下降,这些信息在某些时候实际上是有用的。
您绝对不会使用任何纯文本标题来实现访问控制。
当有更好的替代方案时,用户代理检测被认为是不好的,但将其包含在可以确定优雅降级的检测过程中肯定没有害处。
我在整个过程中遇到的问题是,我们忙于为用户提供一些明智的东西,但似乎从不认为在您不确定时提出问题是可以接受的。如果您不确定用户代理,为什么不询问一次并存储?您可以使用用户代理作为指导。
所以总结一下我的想法,基本上用户代理标头是不可靠的,所以依赖它是不好的。这并不意味着您无法从中提取一定程度的有价值信息,因为更可靠的选择会让您处于不确定状态。一般来说,断定它是坏的是错误的。只是你对这些信息所做的事情决定了它是否变坏。
更新
在看到您对问题的更新后,我有以下 cmets 可以贡献。
我想嗅探图像请求并为客户端提供基于用户代理的图像吗?
如果这是唯一的变量,那么它可能会起作用,但您唯一需要改变的是图像的情况很少见。我不想检测每个请求,因为我想为客户提供一致的解决方案。这意味着我为他们提供了一个页面,使他们请求正确的资源。该页面为所有集成资源提供了一个统一的解决方案。本文档中的所有变体都适用于特定视图。
我尊重用户代理字符串更改中间视图的可能性非常小,似乎不值得担心。然而,采用这一原则也减少了您需要执行浏览器/平台检测的次数,这只会是有益的。这使您可以更轻松地在客户端上切换视图。如果客户说实际上你的观点错了,我是平板电脑而不是手机,你该如何纠正?您为用户提供了一个更好的页面,否则您将需要为您的图像请求欺骗标题......糟糕的想法。 不要使用用户代理字符串来提供图片等通用资源。
潜在的改进
平台识别是网络现代发展中一个非常活跃的领域。随着计算变得越来越普遍,平台变化越来越大,我们对了解我们所服务的平台的需求也在增加。我认为当前条件下这个问题的一般解决方案将落在指纹和统计分析上。
考虑这个应用程序 - akinator.com - 请注意来自大量稀疏数据的统计分析是如何准确得令人讨厌的。在有限的环境(浏览器配置集)中,您可以想象我们可以向客户端的浏览器询问一些问题。然后,我们对某些 n 维特征空间中的响应进行统计分析。使用用户代理作为这个空间的一个维度将是有用的和自我限制的,这取决于你找到的结果。如果它在很大程度上不准确,那么它会看到很大的价差,并且您从中获得的价值量将是自我限制的。
当然,您从该统计模型中获得任何价值的能力要求您能够获得一些经过验证的事实。例如,这可能是运行 JavaScript 测试套件来检测客户端 js 功能,或者实际上,在不确定的情况下,您实际上可以要求用户告诉您他们的平台是什么。
如需进一步阅读,请参阅 Mozilla 的这篇文章
https://developer.mozilla.org/en/Browser_detection_using_the_user_agent
今天,寻找这些字符串是知道
设备在提供服务之前在移动设备(或平板电脑)上运行
HTML。