如果网站需要实现手机和PC双界面适应,可以有两种方式:
第一种是响应式界面,根据屏幕宽度来判定显示的格式。这种需要前端来做,手机/PC共用一套代码,有一定的局限性。
第二种是后端通过request请求头中的内容来分析客户端设备类型,从而返回不同的参数响应。这种方法需要前端写两套代码,根据后台返回的参数不同而跳转到不同的界面。
个人比较倾向于第二种方法,第二种方法显示页面的兼容性更强,不会造成一些意想不到的由客户端不同造成的兼容性问题。
那么怎么判断呢?
可参照下面两篇博文进行:
https://blog.csdn.net/weixin_27322123/article/details/116516053
https://blog.csdn.net/qq_38084142/article/details/81663465
其实上面两篇博文的价值就告诉你在headers中,如果有哪些关键字就可判断为来自于移动端,否则就认为是电脑端。
在分析了自己网站的日志后,并结合上面的文章,总结出如下关键词为来自移动端:
mobile
android
mac os
windows phone
iphone
ipad
上面的mac os
应该算作PC端,因为mac是用在苹果的个人笔记本(MacBook)和台式电脑(iMac)上的系统。所以正确的移动端包含的关键字如下:
mobile
android
windows phone
iphone
ipad
另外,我们还可以把含phone
的合并,并把ipad
变为pad
,所以最终我们要判断user-agent里含不含下面这些字符串,如果含,则认为是移动端,如果不含,则认为不是移动端:
mobile
android
phone
pad
注意:先要对headers全部转换为小写哦。
附一些常见的浏览器的user-agent(User-Agent)
android、mobile:
"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Mobile Safari/537.36"
iphone、mobile、mac os:
"Mozilla/5.0 (iPhone; CPU iPhone OS 16_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.38(0x1800262b) NetType/WIFI Language/zh_CN qcloudcdn-xinan Request-Source=4 Request-Channel=99"
ipad、mobile、mac os:
"Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"
华为平板移动端模式的uer-agent如下:
"Mozilla/5.0 (Linux; Android 9; HarmonyOS; JDN2-W09; HMSCore 6.12.2.301) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.88 HuaweiBrowser/14.0.4.301 Mobile Safari/537.36"
华为手机上自带的浏览器开移动端模式如下:
"Mozilla/5.0 (Linux; Android 12; HarmonyOS; BMH-AN10; HMSCore 6.12.2.302) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.88 HuaweiBrowser/14.0.0.330 Mobile Safari/537.36"
上面这个user-agent各部分意义解释如下:
Mozilla/5.0: 这是标准的Mozilla格式标识符,表明该User-Agent字符串是为了与Mozilla浏览器兼容而设计的。实际上,现代浏览器的User-Agent字符串通常以"Mozilla/5.0"开头,即使它们不是Mozilla浏览器。
(Linux; Android 12; HarmonyOS; BMH-AN10; HMSCore 6.12.2.302): 这部分提供了有关操作系统的信息。在这个例子中,用户代理运行在一个Linux内核上,版本为Android 12,同时还包括了HarmonyOS的信息,表明可能是华为设备。
AppleWebKit/537.36 (KHTML, like Gecko): 这表示浏览器内核,通常用于渲染网页。在这里,浏览器内核是WebKit,支持KHTML(KHTML是一个用于Konqueror浏览器的渲染引擎)和Gecko(Mozilla Firefox浏览器的引擎)。Applewebkit/537.36是主流浏览器(如Chrome、Safari等)中的核心引擎,是用于处理网页显示的主要软件组件之一。它是由Webkit引擎(一个开源的Web浏览器引擎)衍生出来的。
Chrome/99.0.4844.88: 这是浏览器的名称和版本信息。在这个例子中,浏览器是Chrome,版本号是99.0.4844.88。
HuaweiBrowser/14.0.0.330: 这是另一个浏览器的信息,可能是设备上的另一个浏览器。在这里,浏览器是华为浏览器,版本号是14.0.0.330。应该说是华为浏览器在Chrome浏览器的基础上开发而来,而Chrome浏览器用的核是AppleWebKit/537.36。
Mobile Safari/537.36: 这是指浏览器的用户代理是模拟移动设备的Safari浏览器,版本号是537.36。
总的来说,该User-Agent字符串表示一个在Android 12上运行的设备,可能是华为设备,同时使用了Chrome和华为浏览器来访问网页。
手机上的傲游浏览器的如下:
"Mozilla/5.0 (Linux; Android 12; BMH-AN10 Build/HUAWEIBMH-AN10) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/99.0.4844.88 Mobile Safari/537.36"
手机上的QQ浏览器如下:
"Mozilla/5.0 (Linux; U; Android 12; zh-cn; BMH-AN10 Build/HUAWEIBMH-AN10) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/109.0.5414.86 MQQBrowser/13.8 Mobile Safari/537.36 COVC/046801"
PC端上的360极速浏览器,开移动端模式,发现uer-agent如下:
"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Mobile Safari/537.36"
PC端上的360极速浏览器,开电脑模式,发现uer-agent如下:
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
华为平板开电脑模式,发现uer-agent如下:
182.149.202.20 - - [28/Nov/2023:13:36:26 +0800] "GET /index/ HTTP/1.1" 200 670 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.88 Safari/537.36"
手机上的傲游浏览器开电脑模式,发现uer-agent如下:
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36 MxBrowser/7.0.3.4000"
手机上的华为自带浏览器,开电脑模式,发现uer-agent如下:
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.88 Safari/537.36"