服务器端用户代理检测/嗅探是否不好?

Ray*_*nos 26 browser user-agent browser-detection

已知客户端用户代理检测是不好的,并且不鼓励使用特征检测.但是,根据HTTP请求中的传入用户代理字段做出不同反应是否也很糟糕?

一个示例是基于传入的用户代理是移动用户还是桌面用户来发送更小或更大的图像.

Mat*_*sch 18

我认为这取决于你的动机是什么.例如,在移动网络领域,您尝试做的是为用户提供在其平台上看起来合理的内容.为什么要关注用户报告的用户代理,何时纯粹是为了自己的利益?如果他们努力用不同的用户代理欺骗你,那么他们是唯一受苦的人.当然,主要的麻烦是误报; 它并不完全可靠.

我遵循这样的论点,你不应该依赖它,但移动开发人员受到这样的通用广泛声明的攻击.是的,有很好的选择,但是在你能想象的每个浏览器中,这些信息在确定性开始降低的某些时候实际上是有用的.

您当然不会使用任何纯文本标题来使用它来促进访问控制.

当存在更好的替代方案时,用户代理检测被认为是错误的,但将其包含在检测过程中肯定没有害处,该检测过程在确定性方面优雅地降级.

我对整个过程的问题在于,我们在为用户提供合情合理的东西,但似乎从不认为在你不确定的时候可以接受.如果您不确定用户代理,为什么不问一次并存储?您可以使用用户代理作为指导.

因此,总结一下我的想法,基本上用户代理标头是不可靠的,因此依赖它是不好的.这并不意味着您无法从中获取一定程度的有价值信息,而更可靠的选项会使您处于不确定状态.一般来说,断定它是坏的是错误的.这就是你使用这些信息做坏事与否.

更新

在看到您对问题的更新后,我有以下评论要做出贡献.我想要嗅探图像请求并向客户端提供基于用户代理的图像吗?

如果这是唯一的变量,那么它可能会起作用,但很少会出现这样的情况,即你唯一不同的是图像.我不想检测每个请求,因为我想为客户端提供一致的解决方案.这意味着我为他们提供了一个页面,使他们能够请求正确的资源.该页面为所有集成资源提供了一个统一的解决方案.本文档中的所有变体都适用于特定视图.

我认为用户代理字符串在视图中变化的可能性非常小,似乎并不值得担心.但是,采用这一原则还可以减少执行浏览器/平台检测所需的次数,这只会是有益的.这使您可以更轻松地在客户端上切换视图.如果客户说实际上你看错了,我就是平板电脑而不是电话,你怎么去纠正?您为用户提供了更好的页面,否则您需要为您的图像请求欺骗标题......糟糕的主意.不要使用user-agent字符串来提供像图像这样的通用资源.

潜在的改进

平台识别是网络现代发展的一个非常活跃的领域.随着计算变得越来越普遍,平台变得越来越广泛,我们理解我们所服务的平台的需求也在增加.我认为在当前条件下这个问题的一般解决方案将落在指纹识别和统计分析上.

考虑一下这个应用程序 - akinator.com - 请注意来自大量稀疏数据的统计分析是如何令人烦恼地准确的.在有限的环境(一组浏览器配置)中,您可以想象我们可以向客户端的浏览器询问一些问题.然后,我们对某些n维特征空间中的响应进行统计分析.根据您找到的结果,使用user-agent作为此空间的维度将是有用且自我限制的.如果它在很大程度上是不准确的,那么它将看到很大的差异,你从中获得的价值将是自我限制的.

当然,您从此统计模型中获取任何值的能力要求您能够获得一些经过验证的事实.例如,这可能是运行JavaScript测试套件来检测客户端js功能,或者实际上,在不确定性中,您实际上可以要求用户告诉您他们的平台是什么.


为了进一步阅读,我将向您介绍Mozilla的这篇文章

https://developer.mozilla.org/en/Browser_detection_using_the_user_agent

今天,在提供HTML之前,查找这些字符串是了解设备在移动设备(相应的平板电脑)上运行的唯一方法.

  • (是的,我们现在需要这个.) (2认同)