現在很多網站,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>