WEB页面如何得知用户注册页面html模板当前是手机访问还是通过3G/4G网络访问

他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)通过JS判断联网类型和连接状态的实现代码
转载 & & 作者:洪磊
这篇文章主要介绍了通过JS判断联网类型和连接状态的实现代码,需要的朋友可以参考下
中国的移动网络环境复杂,为了给用户带去更好访问体验,开发者希望能了解用户当前的联网方式,然后给用户一个符合当前网络环境的请求结果。
W3C的规范中给出了一个方法来获得现在的网络状态navigator.connection;根据Working Draft 29 November 2012协议规范我们可以从接口中获得bandwidth(带宽,M/s)和metered两个参数的值;还提供了一个监听方法,来时刻监听接入环境的变化情况。现实中我们发现很多浏览器并没有返回bandwidth值,而且遵守了Working Draft 07 June 2011的协议返回给我们type(类型,wifi/2g/3g/4g)。
我们接下来就看看各家的支持情况
Android 2.3+ Browser
Opera Mini
说明下在iPhone中任何浏览器都无法得到相关信息。
通过上面的说明,我们发现还是可以通过这个参数了解很大一部分用户的联网情况的,并且为他们提供更加优质的体验。
接下来我们重点说说各浏览器的返回情况。
大部分浏览器会返回一个int型的类型,其中的特例是QQ浏览器,返回的就是类型名称,对应关系如下
CELL_4G(中国现在也会出现这个值,是hspa+)
接下去是一个更大的特例,这就是firefox,他使用了新版规范,所以返回的是bandwidth;不过很奇怪的是只要是wifi或3G他就返回20,如果是2G返回的就是0.1953125;每次都一样不管现在网络状态到底是多少。这个问题还会继续跟进。
给大家提供一个demo地址:
Demo中对不支持connection的浏览器直接返回了{type:0},这样就很便利解决了某些浏览器不支持的问题;对于不支持又能上网的浏览器处理为“unknown”当然也是合乎情理的。
很多工程师觉得这个功能支持还不好,还是先不使用的好;但是我觉得只要错误能被处理,风险能被把控,为什么不给那些先天优秀的客户提供更友好的体验呢。
今天同学说到让后端判断速度,这个可能有点难;不过确实可以通过每次的异步请求去得到用户大概的速度(加载的时间和文件大小其实前端都能得到),然后在选择性的提供某些服务,之后也准备向这个方向上多思考下。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具iOS 判断当前网络状态的三种方法
招聘信息:
在项目中,为了好的用户体验,有些场景必须线判断网络状态,然后才能决定改干嘛。比如视频播放,需要线判断是Wifi还是4G,Wifi直接播放,4G先提示用户。获取网络状态的方法大概有三种:1. Reachability这是苹果的官方演示demo中使用到的方法,我们可以到苹果官方文档里(点击左上角Download Sample Code 即可下载),然后把Demo里的Reachability.h和.m考到自己项目中,并在Build Phases 的 Link Binary 添加SystemConfiguration.framework框架,然后在需要使用的地方导入Reachability头文件在 Reachability头文件中我们可以看到无网络,wifi和蜂窝网三个网络状态的枚举值,如下:typedef&enum&:&NSInteger&{
&&&&NotReachable&=&0,
&&&&ReachableViaWiFi,
&&&&ReachableViaWWAN
}&NetworkS(1)获取网络状态:在iOS 7之前,当用户网络为蜂窝网络时,是没法判断3G、4G等网络类型的,iOS 7 后是可以判断的-(NSString&*)internetStatus&{
&&&&Reachability&*reachability&&&=&[Reachability&reachabilityWithHostName:@"www.apple.com"];
&&&&NetworkStatus&internetStatus&=&[reachability&currentReachabilityStatus];
&&&&NSString&*net&=&@"WIFI";
&&&&switch&(internetStatus)&{
&&&&&&&&case&ReachableViaWiFi:
&&&&&&&&&&&&net&=&@"WIFI";
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&case&ReachableViaWWAN:
&&&&&&&&&&&&net&=&@"蜂窝数据";
&&&&&&&&&&&&//net&=&[self&getNetType&];&&&//判断具体类型
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&case&NotReachable:
&&&&&&&&&&&&net&=&@"当前无网路连接";
&&&&&&&&&&&&
&&&&&&&&default:
&&&&&&&&&&&&
&&&&return&
}(2)当用户为手机自带网络时,判断具体网络类型这时可以使用系统自带的API来判断是2G、3G还是4G,这就要使用到CTTelephonyNetworkInfo这类,记得在工程添加CoreTelephony.framework,并导入头文件、-&(NSString&*)getNetType
&&&&&&&CTTelephonyNetworkInfo&*info&=&[[CTTelephonyNetworkInfo&alloc]&init];
&&&&&&&&&&&&NSString&*currentStatus&=&info.currentRadioAccessT
&&&&&&&&&&&&if&([currentStatus&isEqualToString:@"CTRadioAccessTechnologyGPRS"])&{
&&&&&&&&&&&&&&&&netconnType&=&@"GPRS";
&&&&&&&&&&&&}else&if&([currentStatus&isEqualToString:@"CTRadioAccessTechnologyEdge"])&{
&&&&&&&&&&&&&&&&netconnType&=&@"2.75G&EDGE";
&&&&&&&&&&&&}else&if&([currentStatus&isEqualToString:@"CTRadioAccessTechnologyWCDMA"]){
&&&&&&&&&&&&&&&&netconnType&=&@"3G";
&&&&&&&&&&&&}else&if&([currentStatus&isEqualToString:@"CTRadioAccessTechnologyHSDPA"]){
&&&&&&&&&&&&&&&&netconnType&=&@"3.5G&HSDPA";
&&&&&&&&&&&&}else&if&([currentStatus&isEqualToString:@"CTRadioAccessTechnologyHSUPA"]){
&&&&&&&&&&&&&&&&netconnType&=&@"3.5G&HSUPA";
&&&&&&&&&&&&}else&if&([currentStatus&isEqualToString:@"CTRadioAccessTechnologyCDMA1x"]){
&&&&&&&&&&&&&&&&netconnType&=&@"2G";
&&&&&&&&&&&&}else&if&([currentStatus&isEqualToString:@"CTRadioAccessTechnologyCDMAEVDORev0"]){
&&&&&&&&&&&&&&&&netconnType&=&@"3G";
&&&&&&&&&&&&}else&if&([currentStatus&isEqualToString:@"CTRadioAccessTechnologyCDMAEVDORevA"]){
&&&&&&&&&&&&&&&&netconnType&=&@"3G";
&&&&&&&&&&&&}else&if&([currentStatus&isEqualToString:@"CTRadioAccessTechnologyCDMAEVDORevB"]){
&&&&&&&&&&&&&&&&netconnType&=&@"3G";
&&&&&&&&&&&&}else&if&([currentStatus&isEqualToString:@"CTRadioAccessTechnologyeHRPD"]){
&&&&&&&&&&&&&&&&netconnType&=&@"HRPD";
&&&&&&&&&&&&}else&if&([currentStatus&isEqualToString:@"CTRadioAccessTechnologyLTE"]){
&&&&&&&&&&&&&&&&netconnType&=&@"4G";
&&&&&&&&&&&&}
}用此方法判断的蜂窝网络类型有如下类型:CTRadioAccessTechnologyGPRS&&&&&&&&&//介于2G和3G之间,也叫2.5G&,过度技术&&&&
CTRadioAccessTechnologyEdge&&&&&&&&&//EDGE为GPRS到第三代移动通信的过渡,EDGE俗称2.75G&&&
CTRadioAccessTechnologyWCDMA&&&&&&&&&&&
CTRadioAccessTechnologyHSDPA&&&&&&&&&&&&//亦称为3.5G(3?G)&&
CTRadioAccessTechnologyHSUPA&&&&&&&&&&&&//3G到4G的过度技术&&
CTRadioAccessTechnologyCDMA1x&&&&&&&//3G&&&&&&
CTRadioAccessTechnologyCDMAEVDORev0&&&&//3G标准&&
CTRadioAccessTechnologyCDMAEVDORevA&&&&
CTRadioAccessTechnologyCDMAEVDORevB&&&&
CTRadioAccessTechnologyeHRPD&&&&&&&&//电信使用的一种3G到4G的演进技术,&3.75G&&&&&&&
CTRadioAccessTechnologyLTE&&&&&&&&&&//接近4G2. 通过系统statusBar判断这种方法在iPhone X 上可能引起奔溃,可能是苹果修改了statusBar的keyPath,所以拿到的东西为nil,导致崩溃//获取当前网络状态&&(iPhone&X&上可能引发崩溃)
+&(NSString&*)networkingStatesFromStatebar&{&&
&&&&//&状态栏是由当前app控制的,首先获取当前app&&
&&&&UIApplication&*app&=&[UIApplication&sharedApplication];&&
&&&&//iphone&X&会在这里崩溃
&&&&NSArray&*children&=&[[[app&valueForKeyPath:@"statusBar"]&valueForKeyPath:@"foregroundView"]&subviews];&&&&
&&&&int&type&=&0;&&
&&&&for&(id&child&in&children)&{&&
&&&&&&&&if&([child&isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView")&class]])&{&&
&&&&&&&&&&&&type&=&[[child&valueForKeyPath:@"dataNetworkType"]&intValue];&&
&&&&&&&&}&&
&&&&NSString&*stateString&=&@"wifi";&&
&&&&switch&(type)&{&&
&&&&&&&&case&0:&&
&&&&&&&&&&&&stateString&=&@"notReachable";&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&&&
&&&&&&&&case&1:&&
&&&&&&&&&&&&stateString&=&@"2G";&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&&&
&&&&&&&&case&2:&&
&&&&&&&&&&&&stateString&=&@"3G";&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&&&
&&&&&&&&case&3:&&
&&&&&&&&&&&&stateString&=&@"4G";&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&&&
&&&&&&&&case&4:&&
&&&&&&&&&&&&stateString&=&@"LTE";&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&&&
&&&&&&&&case&5:&&
&&&&&&&&&&&&stateString&=&@"wifi";&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&&&
&&&&&&&&default:&&
&&&&&&&&&&&&&&
&&&&return&stateS&&
}3. 通过AFNetworking此方法可以写在AppDelegate中,每当网络状态发生变化时,就可以发通知,实时监测网络变化,然后做相应的处理#pragma&mark&-&-------------&监测网络状态&-------------
-&(void)monitorNetworking
&&&&[[AFNetworkReachabilityManager&sharedManager]&startMonitoring];
&&&&[[AFNetworkReachabilityManager&sharedManager]&setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus&status)&{
&&&&&&&&switch&(status)&{
&&&&&&&&&&&&case&-1:
&&&&&&&&&&&&&&&&NSLog(@"未知网络");
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&case&0:
&&&&&&&&&&&&&&&&NSLog(@"网络不可达");
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&case&1:
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&NSLog(@"GPRS网络");
&&&&&&&&&&&&&&&&//发通知,带头搞事
&&&&&&&&&&&&&&&&[[NSNotificationCenter&defaultCenter]&postNotificationName:@"monitorNetworking"&object:@"1"&userInfo:nil];
&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&case&2:
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&NSLog(@"wifi网络");
&&&&&&&&&&&&&&&&//发通知,搞事情
&&&&&&&&&&&&&&&&[[NSNotificationCenter&defaultCenter]&postNotificationName:@"monitorNetworking"&object:@"2"&userInfo:nil];
&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&default:
&&&&&&&&&&&&&&&&
&&&&&&&&if&(status&==&AFNetworkReachabilityStatusReachableViaWWAN&||&status&==&AFNetworkReachabilityStatusReachableViaWiFi)&{
&&&&&&&&&&&&NSLog(@"有网");
&&&&&&&&}else{
&&&&&&&&&&&&NSLog(@"没网");
微信扫一扫
订阅每日移动开发及APP推广热点资讯公众号:CocoaChina
您还没有登录!请或
点击量4799点击量4152点击量3779点击量3431点击量3162点击量3159点击量3130点击量2968点击量2854
&2016 Chukong Technologies,Inc.
京公网安备89如何用 js 或 php 判断手机网络环境(WiFi 3G/2G)?
10:17:14 +08:00 · 8659 次点击
先不考虑和运营商打交道,据说电信可以在header里获取到?移动联通怎么办
5 回复 &| &直到
15:46:15 +08:00
& & 12:09:42 +08:00
测试了下,apache数据里面也就只有请求ip不同了,我能想到的方法就是拿ip去ip138查了
& & 12:12:05 +08:00
移动2G网络 还能直接拿到 手机号呢
& & 15:32:52 +08:00
ios 里貌似有专门的判断。但是是系统级的。
& & 15:38:23 +08:00
我手机卡是电信的,没发现header里有识别码。请明示。
& & 15:46:15 +08:00
@ 把apn设置成xxwap,在看下header应该就会有的
& · & 1894 人在线 & 最高记录 3541 & · &
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.0 · 20ms · UTC 00:35 · PVG 08:35 · LAX 17:35 · JFK 20:35? Do have faith in what you're doing.web网站判断是手机访问还是pc电脑访问的检测逻辑
在现在手机上网和wifi越来越普及的情况下,web网站需要对http的客户端进行区分并适配不同的页面,确保给用户最合适的体验效果。
因此从网站服务器端去分析,区分当前http请求是来自mobile的手机上的浏览器,还是来自Windows,Linux,Mac等PC电脑上的浏览器,就显得非常有必要了。
根据相关日志分析后总结出简单的识别逻辑规则如下:
首先从上网方式上来区分手机终端行为:用手机上网可能通过cmwap方式,cmnet方式,3g网络,wifi方式等
除了cmwap方式,其它方式上网的网络情况除了网速区别,其它情况基本一样。
因为存在有人在电脑上通过3g卡等方式上网,因此识别逻辑必须先识别明确就是电脑上的浏览器的ua,当作来自电脑的请求。
然后再识别cmwap网关的特征,包含特征的,则认为该请求来自手机终端。
其次再做手机ua识别,属于手机ua特征的,再当作手机请求,其它均当作电脑pc端的请求访问。
(不考虑用Accept这个header进行识别,因为这个头信息有很多是乱填的,完全不靠谱。)
通过对http头信息的分析检测,这样可以当前请求进行适配展现最适合的页面内容,让pc用户看web页面,手机用户看wap页面。
package com.lizongbo..
import javax.servlet.http.HttpServletR
public class HttpReqUtil {
/**Wap网关特有和某些手机终端浏览器特有的头信息*/
private static String mobileHeaders[]=new String[]{
“HTTP_X_UP_CALLING_LINE_ID”,//cmwap情况下中国移动的手机号码,目前基本没有这个head了
“x-up-calling-line-id”,//uniwap情况下下中国联通手机号码,例如:x-up-calling-line-id=8615***618119,某些移动网关也用这个header放手机号码
“x--profile”,//手机终端才会有的uaprof文件url,例如:x--profile=” ”
“X_WAP_PROFILE”,//X_WAP_PROFILE=
“X--MusicShop-Bearer”,//诺基亚手机送来的网络类型,例如X--MusicShop-Bearer=GPRS/3G
“X-Nokia-MusicShop-Version”,//诺基亚网关送的参数,例如:X-Nokia-MusicShop-Version=11.1014.15
“x-up-bear-type”,//wap网关的参数,疑似上网类型,例如:x-up-bear-type=GPRS,或x-up-bear- type=GPRS/EDGE,X-Up-Bearer-Type=CSD,x-up-bear-type=CDMA CSD,x-up-bear-type=TD-SCDMA
“X-Nokia-BEARER”,//诺基亚wap网关的参数,疑似上网类型,例如:X-Nokia-BEARER=WCDMA,或X-Nokia-BEARER=GPRS
“X-Nokia-Gateway-Id”,//诺基亚wap网关的参数,例如:X-Nokia-Gateway-Id=NBG/3.0/1,或X-Nokia-gateway-id=NWG/4.1/Build4.1.04
“X-Nokia-MSISDN”,//诺基亚wap网关的参数,疑似用户手机号码,例如X-Nokia-MSISDN=861860*******
“x-source-id”,//cmwap网关参数,例如:x-source-id=220.206.156.33,也有:X-Source-ID=FZGGSN31
“X-Nokia-CONNECTION_MODE”,//wap网关参数,例如:X-Nokia-CONNECTION_MODE=TCP
“X-Nokia-MaxDownlinkBitrate”,//诺基亚wap网关参数,含义未知,例如:X-Nokia-MaxDownlinkBitrate=0
“X-Nokia-MaxUplinkBitrate”,//诺基亚wap网关参数,含义未知,例如:X-Nokia-MaxUplinkBitrate=0
“Bearer-Indication”,//不明参数,例如:Bearer-Indication=11,
Bearer-Indication=gsm_gprs_ipv4
“X_NETWORK_INFO”,//X_NETWORK_INFO=GPRS,86136********,10.100.246.217,,unsecured
“x-NAS-Identifier”,//含义不明,例如:x-NAS-Identifier=fj-telecom-cdma-pdsn
“x-online-host”,//cmwap客户端向cmwap指定header,不知道怎么的移动把它送给服务器了,例如:x-online-host=b.wap.618119.com:80
“X_WAP_CLIENTID”,//疑似加密处理后的用户身份信息,例如X_WAP_CLIENTID=618119**********
//以下是OperaMini特有的header ,see:
“X-OperaMini-Features”,//OperaMini特有的客户端特性描述。例如:X-OperaMini- Features=advanced, download, file_system,X-OperaMini-Features=advanced, file_system, camera, touch, folding
“X-OperaMini-Phone-UA”,//OperaMini特有的传原始UserAgent的header。例如:X-OperaMini- Phone-UA=BlackBerry.0.174 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/107,此时的User-Agent=Opera/9.80 (BlackB Opera Mini/5.1.5; U; zh) Presto/2.5.25
“X-OperaMini-Phone”,//OperaMini特有的自己提取的机型信息,品牌和型号直接用井号隔开,信息不靠谱,例如:X-OperaMini-Phone=BlackBerry # BlackBerry 8310
“X-OperaMini-UA”,//OperaMini特有的ua描述信息,例如:X-OperaMini-UA=Opera Mini/5.1.22555/hifi/om511china/zh
/**Wap网关Via头信息中特有的描述信息*/
private static String mobileGateWayHeaders[]=new String[]{
“ZXWAP”,//中兴提供的wap网关的via信息,例如:Via=ZXWAP GateWay,ZTE Technologies,
“chinamobile.com”,//中国移动的诺基亚wap网关,例如:Via=WTP/1.1 GDSZ-PB-GW003-WAP07.gd.chinamobile.com (Nokia WAP Gateway 4.1 CD1/ECD13_D/4.1.04)
“monternet.com”,//移动梦网的网关,例如:Via=WTP/1.1 BJBJ-PS-WAP1-GW08.bj1.monternet.com. (Nokia WAP Gateway 4.1 CD1/ECD13_E/4.1.05)
“infoX”,//华为提供的wap网关,例如:Via=HTTP/1.1 GDGZ-PS-GW011-WAP2 (infoX-WISG, Huawei Technologies),或Via=infoX WAP Gateway V300R001, Huawei Technologies
“XMS 724Solutions HTG”,//国外电信运营商的wap网关,不知道是哪一家
“wap.lizongbo.com”,//自己测试时模拟的头信息
“Bytemobile”,//貌似是一个给移动互联网提供解决方案提高网络运行效率的,例如:Via=1.1 Bytemobile OSN WebProxy/5.1
/**电脑上的IE或Firefox浏览器等的User-Agent关键词*/
private static String pcHeaders[]=new String[]{
“Windows 98”,
“Windows ME”,
“Windows ;,
“Windows XP”,
“Windows NT”,
“Ubuntu”,
/**手机浏览器的User-Agent里的关键词*/
private static String mobileUserAgents[]=new String[]{
“Nokia”,//诺基亚,有山寨机也写这个的,总还算是手机,Mozilla/5.0 (Nokia5800 XpressMusic)UC AppleWebkit(like Gecko) Safari/530
“SAMSUNG”,//三星手机 SAMSUNG-GT-B+SHP/VPP/R5+Dolfin/1.5+Nextreaming+SMM-MMS/1.2.0+profile/MIDP-2.1+configuration/CLDC-1.1
“MIDP-2”,//j2me2.0,Mozilla/5.0 (SymbianOS/9.3; U; Series60/3.2 NokiaE75-1 /110.48.125 Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413
“CLDC1.1”,//M600/MIDP2.0/CLDC1.1/Screen-240X320
“SymbianOS”,//塞班系统的,
“MAUI”,//MTK山寨机默认ua
“UNTRUSTED/1.0”,//疑似山寨机的ua,基本可以确定还是手机
“Windows CE”,//Windows CE,Mozilla/4.0 ( MSIE 6.0; Windows CE; IEMobile 7.11)
“iPhone”,//iPhone是否也转wap?不管它,先区分出来再说。Mozilla/5.0 (iP U; CPU iPhone OS 4_1 like Mac OS X; zh-cn) AppleWebKit/532.9 (KHTML, like Gecko) Mobile/8B117
“iPad”,//iPad的ua,Mozilla/5.0 (iP U; CPU OS 3_2 like Mac OS X; zh-cn) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10
“Android”,//Android是否也转wap?Mozilla/5.0 (L U; Android 2.1-update1; zh- XT800 Build/TITA_M2_16.22.7) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17
“BlackBerry”,//BlackBerry.0.106-4.5.0.182
“UCWEB”,//ucweb是否只给wap页面? Nokia5800 XpressMusic/UCWEB7.5.0.66/50/999
“ucweb”,//小写的ucweb,貌似是uc的代理服务器,Mozilla/6.0 ( MSIE 6.0;) Opera ucweb-squid
“BREW”,//很奇怪的ua,例如:REW-Applet/0x (BREW/3.1.5.20; DeviceId: 40105; Lang: zhcn) ucweb-squid
“J2ME”,//,很奇怪的ua,只有J2ME四个字母
“YULONG”,//宇龙手机,YULONG-CoolpadN68/10.14 IPANEL/2.0 CTC/1.0
“YuLong”,//还是宇龙
“COOLPAD”,//宇龙酷派,YL-COOLPADS100/08.10.S100 POLARIS/2.9 CTC/1.0
“TIANYU”,//天语手机,TIANYU-KTOUCH/V209/MIDP2.0/CLDC1.1/Screen-240X320
“TY-“,//天语,TY-F_ JUPITOR/2.2 CTC/1.0
“K-Touch”,//还是天语,K-Touch_N2200_CMCC/TBG3_V0801 MTK/6223 Release/30.07.2008 Browser/WAP2.0
“Haier”,//海尔手机,Haier-HG-M217_CMCC/3.0 Release/12.1.2007 Browser/WAP2.0
“DOPOD”,//多普达手机,
“Lenovo”,//联想手机,Lenovo-P650WG/S100 LMP/LML Release/ Profile/MIDP2.0 Configuration/CLDC1.1
“LENOVO”,//联想手机,比如:LENOVO-P780/176A
“HUAQIN”,//华勤手机
“AIGO-“,//爱国者居然也出过手机,AIGO-800C/2.04 TMSS-BROWSER/1.0.0 CTC/1.0
“CTC/1.0”,//含义不明
“CTC/2.0”,//含义不明
“CMCC”,//移动定制手机,K-Touch_N2200_CMCC/TBG3_V0801 MTK/6223 Release/30.07.2008 Browser/WAP2.0
“DAXIAN”,//大显手机,DAXIAN X180 UP.Browser/6.2.3.2(GUI) MMP/2.0
“MOT-“,//摩托罗拉,MOT-MOTOROKRE6/1.0 LinuxOS/2.4.20 Release/8.4.2006 Browser/Opera8.00 Profile/MIDP2.0 Configuration/CLDC1.1 Software/R533_G_11.10.54R
“SonyEricsson”,//索爱手机,SonyEricssonP990i/R100 Mozilla/4.0 ( MSIE 6.0; Symbian OS; 405) Opera 8.65 [zh-CN]
“GIONEE”,//金立手机
“HTC”,//HTC手机
“ZTE”,//中兴手机,ZTE-A211/P109A2V1.0.0/WAP2.0 Profile
“HUAWEI”,//华为手机,
“webOS”,//palm手机,Mozilla/5.0 (webOS/1.4.5; U; zh-CN) AppleWebKit/532.2 (KHTML, like Gecko) Version/1.0 Safari/532.2 Pre/1.0
“GoBrowser”,//3g GoBrowser.User-Agent=Nokia5230/GoBrowser/2.0.290 Safari
“IEMobile”,//Windows CE手机自带浏览器,
“WAP2.0”,//支持wap 2.0的
* 根据当前请求的特征,判断该请求是否来自手机终端,主要检测特殊的头信息,以及user-Agent这个header
* @param request http请求
* @return 如果命中手机特征规则,则返回对应的特征字符串
public static boolean isFromMobile(HttpServletRequest request) {// 识别当前请求,针对来自手机的请求则跳转到wap页面。
return getFromMobileRule(request)!=
public static String
getFromMobileRule(HttpServletRequest request) {
String userAgent = request.getHeader(“User-Agent”);
if (userAgent != null) {
for (String mheader : pcHeaders) {
if (userAgent.contains(mheader)) {
for (String mheader : mobileHeaders) {// 只要存在网关特有的header,肯定是手机
if (request.getHeader(mheader) != null
&& request.getHeader(mheader).length() & 0) {
String via = request.getHeader(“Via”);
if (via != null) {
for (String mheader : mobileGateWayHeaders) {
// 是不是wap网关的描述
if (via.contains(mheader)) {
if (userAgent != null) {
for (String mheader : mobileUserAgents) {
if (userAgent.contains(mheader)) {
实际调用代码:
String mrule = HttpReqUtil.getFromMobileRule(request);
if (mrule != null && !mrule.equals(“iPhone”) && !mrule.equals(“iPad”)) {
//Android也都当作手机端,暂时不考虑pad
下面是某一段时间内命中相关检测规则的统计结果(前面是数量,后面的特征字符串):
1 GoBrowser
2 x-up-bear-type
5 BlackBerry
8 X-Nokia-MusicShop-Bearer
20 SymbianOS
27 CTC/1.0
36 CLDC1.1
45 SonyEricsson
231 SAMSUNG
317 UNTRUSTED/1.0
489 MIDP-2
490 Windows CE
709 Android
1046 UCWEB
1170 x-wap-profile
1656 x-up-calling-line-id
3436 Nokia
No comments yet.
2011年一月
101113141516
17181920212223
242527282930
我曾经的blog
Powered by

我要回帖

更多关于 用户越权访问url页面 的文章

 

随机推荐