user-agent判斷PC和移動端

現在很多網站,PC瀏覽器和移動端瀏覽器所打開的頁面不同,大部分是根據瀏覽器的user-agent進行判斷的。此處不討論響應式佈局和自適應式佈局。今天和大家分享下如何使用nginx和java服務端對user-agent進行解析,進行特動的業務操作。

user-agent

User Agent中文名爲用戶代理,簡稱 UA,它是一個特殊字符串頭,使得服務器能夠識別客戶使用的操作系統及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等。

nginx 根據User-agent進行反向代理

nginx.conf

location / {

    if ( $http_user_agent ~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC\-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT\-)|(SonyEricsson)|(NEC\-)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi\-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG\-)|(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC\-)|(SED\-)|(EMOL\-)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)" ){

            # 跳轉到百度的手機版本(二級域名) 可以根據自己的需求使用rewrite和proxy_pass
            rewrite https://m.baidu.com break; 
            # 代理到百度
            # proxy_pass https://www.baidu.com;
    }
}
先進入nginx的sbin目錄
重新加載nginx.conf文件指令:sudo ./nginx -s reload

 

Java 獲取user-agent

瀏覽器user-agent

代碼

 UserAgentController.java

@RequestMapping("/userAgent")
@RestController
public class UserAgentController {

    private static final Logger logger = LoggerFactory.getLogger(UserAgentController.class);

    @RequestMapping("/demo")
    public void getUserAgent(HttpServletRequest request) {

        String agent= request.getHeader("user-agent");

        UserAgent userAgent = UserAgent.parseUserAgentString(agent);
        // 操作系統信息
        OperatingSystem operatingSystem = userAgent.getOperatingSystem();
        // 設備類型
        DeviceType deviceType = operatingSystem.getDeviceType();

        Browser browser = userAgent.getBrowser();
        Version version = browser.getVersion(agent);
        logger.info("browser:{}, version:{}",browser.getName(), version.getVersion());

        //是否PC
        if(COMPUTER.equals(deviceType)) {
            logger.info("PC");
        }

        //.... DeviceType 裏面可以判斷是PC還是移動端
    }
}

pom.xml

        <dependency>
            <groupId>eu.bitwalker</groupId>
            <artifactId>UserAgentUtils</artifactId>
            <version>1.21</version>
        </dependency>

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章