现在很多网站,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>