Javascript Web服务器如何可靠地确定发送请求的设备?

Javascript Web服务器如何可靠地确定发送请求的设备?,javascript,webserver,browser-detection,mobile-browser,Javascript,Webserver,Browser Detection,Mobile Browser,我最近注意到,我访问的一些网站能够检测到我用来查看网站的设备,但我不确定它们是如何做到这一点的 例如,音乐流媒体应用程序www.rdio.com提供两种不同的服务;一个用于移动设备,一个用于笔记本电脑和台式电脑。移动设备每月收费10美元,台式机和笔记本电脑每月收费5美元 显然,他们必须有一个非常好的方法来检测发送请求的设备,这是他们业务模型的一部分。rdio和其他公司如何实现这一目标?到目前为止,我想到的一切似乎都很糟糕。例如,如果它们依赖http请求中的头变量,它们如何防止欺骗?或者,如果他们

我最近注意到,我访问的一些网站能够检测到我用来查看网站的设备,但我不确定它们是如何做到这一点的

例如,音乐流媒体应用程序www.rdio.com提供两种不同的服务;一个用于移动设备,一个用于笔记本电脑和台式电脑。移动设备每月收费10美元,台式机和笔记本电脑每月收费5美元

显然,他们必须有一个非常好的方法来检测发送请求的设备,这是他们业务模型的一部分。rdio和其他公司如何实现这一目标?到目前为止,我想到的一切似乎都很糟糕。例如,如果它们依赖http请求中的头变量,它们如何防止欺骗?或者,如果他们在客户端使用javascript检查浏览器功能,您可以检查哪些功能以准确确定设备类型?你会看屏幕分辨率,或者陀螺仪之类的东西,因为如果我有一台笔记本式分辨率的移动设备,或者一台带陀螺仪的笔记本呢


Web服务器检查HTTP请求或浏览器的哪些功能以准确确定设备类型?

它们取决于浏览器的
用户代理来确定客户端使用的设备类型

当然,用户代理可能会被欺骗,而要防止这种情况的发生,您也无能为力

尽管有人试图通过调用特定于浏览器的功能来检测真正的浏览器类型,但这并不可靠


您可以阅读更多信息。

实际上,有些网站依靠客户端(浏览器)为其提供浏览器功能(屏幕大小、渲染引擎、操作系统等)并将其发送回服务器。这可以通过HTML/JS实现。许多网站根据第一页将您重定向到移动版本。您如何知道rdio使用的是这种方法?您刚刚重述了OP的一部分(“如果它们依赖于http请求中的头变量…”),但没有解决附加的特定问题(“它们如何防止欺骗?”)。@TravelingTechGuy
User Agent
也是浏览器提供的值。@galuano1是的,但它只提供了一个字符串,这越来越难解析(比如Mac上的Chrome浏览器),而且不包括分辨率和屏幕深度信息。客户端脚本可以提供更多信息,并节省您的解析和猜测。@TravelingTechGuy是的,它可以提供,并且有一些库可以完成所有解析。您可以从浏览器获取屏幕大小,但不能获取DPI。就像素而言,去年的PC和今年的智能手机并没有太大区别。(另外,在个人电脑上,浏览器可能不是全屏的,因此像素可能比手机小。)您已经注册了这项服务吗?我有种感觉,他们可能有一个网站加上一个移动应用程序,尽管他们似乎没有在任何销售材料中直接这样说。像这样的语言可能暗示有一个单独的移动应用程序(强调我的):“从网络或手机上选择您想要播放的音乐,并尽可能多地收听,即使您处于脱机状态。”将“网络”和“手机”分开可能表示手机使用的不是网络浏览器(本机应用程序)。当然,还有一点是关于离线收听。@DaggNabbit我没有想到他们可能有一个单独的移动应用程序。我没有这项服务,所以我不确定。我只是想想想我在这个位置上会做什么。你是对的,通常的技术都不足以防止欺骗,而且在商业上像这样的模式,我想你会想确保你不会被欺骗。上次我检查rdio时,他们的定价模式更改为web/浏览器10美元/月,web/浏览器/手机/设备12美元/月……所以看起来他们甚至放弃了检查设备。现在的问题是“这个请求是通过应用程序发出的吗?”(哪些应该能够签署或散列请求)或通过web?