我觉得这个问题以前一定在这里有答案,但是我到处都找不到。
网站能否检测到用户正在使用的设备 ?例如,如果用户正在浏览一个应用程序的网站,它是否知道显示一个链接到Google Play或Apple App Store,这取决于他们使用的是什么设备?
我不认为$HTTP_USER_AGENT
是足够的,因为iPad用户可能正在使用Chrome,而Android用户可能正在使用Firefox等。
我有PHP,当然还有Javascript。
检测设备或web浏览器的唯一方法是用户代理字符串,每个web浏览器都必须按照HTTP 1.1协议提供用户代理。用户代理字符串可以包含多个产品令牌。按照惯例,产品令牌按照其对识别应用程序的重要性顺序列出。
对于基于Mozilla的浏览器,user-agent字符串应该遵循以下格式:
MozillaProductToken (MozillaComment) GeckoProductToken *
(VendorProductToken|VendorComment)
嵌入Gecko布局引擎的应用程序应具有以下格式的用户代理字符串:
ApplicationProductToken (ApplicationComment) GeckoProductToken *
(VendorProductToken|VendorComment)
地点:
ProductToken : Mozilla/ MozillaVersion
Version : Major . Minor
Comment : ( Platform; Security; OS-or-CPU;
Localization information;
GeckoVersion)*[; Optional Other Comments] )
Platform : Windows, Linux, Mac etc.
Security : N for no security;
U for strong security;
I for weak security
OS-or-CPU : Windows Version/MacOS
GeckoVersion : String starting with "rv:" followed
by the Gecko version
GeckoProductToken: Gecko/GeckoDate
GeckoDate : Date in the format YYYYMMDD
例子Mozilla发布 Mozilla/5.001 (windows; U; NT4.0; en-US; rv:1.0) Gecko/25250101
基于与上面浏览器相同代码库的品牌版本
Mozilla/5.001 (Macintosh; N; PPC; ja; rv:1.0) Gecko/25250101
MegaCorpBrowser/1.0 (MegaCorp, Inc.)
重新命名的版本
Mozilla/9.876 (X11; U; Linux 2.2.12-20 i686, en; rv:2.0) Gecko/
25250101 Netscape/5.432b1 (C-MindSpring)
基于gecko的浏览器
TinyBrowser/2.0 (TinyBrowser Comment; rv:1.9.1a2pre) Gecko/20201231
歌剧用户字符串规格:
Opera/Version (OS-or-CPU; Encryption; Language)
<标题> 铬他们使用WebKit作为渲染引擎,但使用不同的JavaScript引擎。在Chrome最初的测试版0.2版本中,user-agent字符串包含了来自WebKit的所有信息以及Chrome版本的额外部分。格式如下:
Mozilla/5.0 (Platform; Encryption; OS-or-CPU; Language)
AppleWebKit/AppleWebKitVersion (KHTML, like Gecko) Chrome/
ChromeVersion Safari/SafariVersion
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML,
like Gecko) Chrome/0.2.149.29 Safari/525.13
<标题> Konqueror h1> Mozilla/5.0 (compatible; Konqueror/3.5; SunOS) KHTML/3.5.0 (like Gecko)
<标题> WebKit h1> 2003年,苹果公司宣布将发布自己的网络浏览器,名为Safari。Safari渲染引擎名为WebKit,最初是基于linux的Konqueror web浏览器中使用的KHTML渲染引擎的一个分支。但是如何确保浏览器不会被热门网站锁定呢?答案是,在用户代理字符串中放入足够的信息,以使网站相信该浏览器与另一种流行的浏览器兼容。这将产生一个格式如下的用户代理字符串:
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/
124 (KHTML, like Gecko) Safari/125.1
手机和平板电脑指标
UA字符串的平台部分表示Firefox是运行在手机大小的设备上还是平板电脑上。当Firefox在具有手机外形因素的设备上运行时,它就是移动设备;标记在UA字符串的平台部分。例如:
Mozilla/5.0 (Android; Mobile; rv:13.0) Gecko/13.0 Firefox/13.0
Mozilla/5.0 (Android; Tablet; rv:13.0) Gecko/13.0 Firefox/13.0
但是,如果您使用UA嗅探来将内容定位到设备形状因子,请查找手机形状因子的Mobi(包括Opera Mobile,它使用"Mobi"),不要假设"Android"和设备形状因子之间存在任何相关性。
Android Phone : Mozilla/5.0 (Android; Mobile; rv:13.0) Gecko/13.0 Firefox/13.0
Tablet : Mozilla/5.0 (Android; Tablet; rv:13.0) Gecko/13.0 Firefox/13.0
Firefox OS Phone : Mozilla/5.0 (Mobile; rv:15.0) Gecko/15.0 Firefox/15.0
标题>标题>标题>您可以同时使用服务器端和客户端技术来对访问者正在使用的设备进行智能猜测:
- PHP可以解析用户代理或在已知设备的数据库中查找
- Javascript可以检测许多api和浏览器的功能,给你一个关于设备功能的很好的图片。
虽然没有真正的保证(你基本上相信浏览器是什么选择告诉你关于它自己)这里有两个例子,你可以告诉用户设备:
- http://www.thisdevice.info
- http://wwww.browserleaks.com