Mobile 如何检测请求是否来自移动设备

Mobile 如何检测请求是否来自移动设备,mobile,request,server,detect,Mobile,Request,Server,Detect,在服务器端,是否有任何方法可以检测到来自移动设备(来自移动应用程序)的特定API请求? 我知道用户代理嗅探,但我不喜欢这种方法,因为没有足够的理由不实现它。 我也知道,当我的手机应用程序发出请求时,我可以添加一些标志,但这看起来也有点脏。 真的有什么“合适”的方法吗 我想不会有太大变化,但我的后端在node.js中 你好,谢谢! Tom一般的答案是否定的。你会从设备上收到一个标题/消息。您对设备的所有了解都在标题中,设备可以在标题中写入所需内容。如果您正在谈论http请求(由代理查找指示),您可

在服务器端,是否有任何方法可以检测到来自移动设备(来自移动应用程序)的特定API请求? 我知道用户代理嗅探,但我不喜欢这种方法,因为没有足够的理由不实现它。 我也知道,当我的手机应用程序发出请求时,我可以添加一些标志,但这看起来也有点脏。 真的有什么“合适”的方法吗

我想不会有太大变化,但我的后端在node.js中

你好,谢谢!
Tom

一般的答案是否定的。你会从设备上收到一个标题/消息。您对设备的所有了解都在标题中,设备可以在标题中写入所需内容。如果您正在谈论http请求(由代理查找指示),您可以在此处查看标题:

您所能做的“可靠”就是查找用户代理。在我的例子中,它是Linux上的Mozilla Firefox。但如果我愿意,我可以假装

Host: somesite.org
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:34.0) Gecko/20100101 Firefox/34.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://somesite.org/index.php?page=2
Cookie: rteStatus=rte; 
Cache-Control: max-age=0
也许你可以从推荐人那里得到一些信息,如果它是某个chromium移动站点,或者你可以看看Accept and Accept Encoding,也许一些移动浏览器接受不同的东西。但是,除了通过标头由用户代理确定设备之外,没有可靠的方法来确定设备


另一种方法是查看请求是否来自称为3G或4G池的IP。但是,如果请求不是通过WLAN/WIFI发送的,那么这将起作用。我不确定是否存在3G/4G IP地址池列表。

您可以使用UserAgent字符串进行检测。下面是C#中的代码


当然,“用户代理”一点也不可靠。唯一可行的选择是谷歌/苹果公司知道的某种设备id。。。如果用户发送请求提供我们可以检查的id。。。“嘿,谷歌,除了此用户帐户之外,此设备ID是否有效?”此设备的python版本是:def isMobileDevice(请求):result=False devices=[“Android”、“webOS”、“iPhone”、“iPad”、“iPod”、“BlackBerry”、“IEMobile”、“Opera Mini”]如果有(请求中的设备。environ[“HTTP\u user\u AGENT”]用于设备中的设备):result=真实返回结果
 public bool IsMobileDevice(HttpRequest r){
                    String userAgetnt = r.UserAgent;
                    String deviceName = "Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini";
                    return Regex.IsMatch (r.UserAgent, deviceName);
                }