• 网站如何判断请求是来自手机-移动端还是PC-电脑端?如何让网站能适应不同的客户端?


    如果网站需要实现手机和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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    上面的mac os应该算作PC端,因为mac是用在苹果的个人笔记本(MacBook)和台式电脑(iMac)上的系统。所以正确的移动端包含的关键字如下:

    mobile
    android
    windows phone
    iphone
    ipad
    
    • 1
    • 2
    • 3
    • 4
    • 5

    另外,我们还可以把含phone的合并,并把ipad变为pad,所以最终我们要判断user-agent里含不含下面这些字符串,如果含,则认为是移动端,如果不含,则认为不是移动端:

    mobile
    android
    phone
    pad
    
    • 1
    • 2
    • 3
    • 4

    注意:先要对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"
    
    • 1

    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
    • 1

    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"
    
    • 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"
    
    • 1

    华为手机上自带的浏览器开移动端模式如下:

    "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"
    
    • 1

    上面这个user-agent各部分意义解释如下:

    1. Mozilla/5.0: 这是标准的Mozilla格式标识符,表明该User-Agent字符串是为了与Mozilla浏览器兼容而设计的。实际上,现代浏览器的User-Agent字符串通常以"Mozilla/5.0"开头,即使它们不是Mozilla浏览器。

    2. (Linux; Android 12; HarmonyOS; BMH-AN10; HMSCore 6.12.2.302): 这部分提供了有关操作系统的信息。在这个例子中,用户代理运行在一个Linux内核上,版本为Android 12,同时还包括了HarmonyOS的信息,表明可能是华为设备。

    3. AppleWebKit/537.36 (KHTML, like Gecko): 这表示浏览器内核,通常用于渲染网页。在这里,浏览器内核是WebKit,支持KHTML(KHTML是一个用于Konqueror浏览器的渲染引擎)和Gecko(Mozilla Firefox浏览器的引擎)。Applewebkit/537.36是主流浏览器(如Chrome、Safari等)中的核心引擎,是用于处理网页显示的主要软件组件之一。它是由Webkit引擎(一个开源的Web浏览器引擎)衍生出来的。

    4. Chrome/99.0.4844.88: 这是浏览器的名称和版本信息。在这个例子中,浏览器是Chrome,版本号是99.0.4844.88。

    5. HuaweiBrowser/14.0.0.330: 这是另一个浏览器的信息,可能是设备上的另一个浏览器。在这里,浏览器是华为浏览器,版本号是14.0.0.330。应该说是华为浏览器在Chrome浏览器的基础上开发而来,而Chrome浏览器用的核是AppleWebKit/537.36。

    6. 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"
    
    • 1

    手机上的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"
    
    • 1

    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"
    
    • 1

    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"
    
    • 1

    华为平板开电脑模式,发现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"
    
    • 1

    手机上的傲游浏览器开电脑模式,发现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"
    
    • 1

    手机上的华为自带浏览器,开电脑模式,发现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"
    
    • 1
  • 相关阅读:
    Java的日期类常用方法
    C++运算符重载【加号、左移、递增、指针、赋值、中括号、关系、函数调用】,统统载了
    Linux基础指令笔记大全
    Jenkins CI/CD 持续集成专题二 Jenkins 相关问题汇总
    前端开发综合指南:HTML、CSS和JavaScript详解
    fastapi+mongo+qlib:体系化构建AI量化投研平台
    【STM32】电容触摸按键
    ViewModel的共享(下)
    Spring MVC请求处理流程和九大组件
    领悟《信号与系统》之 非周期信号的傅里叶变换及性质
  • 原文地址:https://blog.csdn.net/wenhao_ir/article/details/134073488