User-Agent

来源:互联网 发布:fm2017坎特数据 编辑:程序博客网 时间:2024/05/01 23:59

/**
*刘梦冰发表于2014-04-23
*/

一、什么是User-Agent

User-Agent是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA。用较为普通的一点来说,是一种向访问网站提供你所使用的浏览器类型、操作系统及版本、CPU 类型、浏览器渲染引擎、浏览器语言、浏览器插件等信息的标识。UA字符串在每次浏览器 HTTP 请求时发送到服务器!浏览器UA 字串的标准格式为: 浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识 版本信息 

1、操作系统标识
  FreeBSD :  
  X11; FreeBSD (version no.) i386
  X11; FreeBSD (version no.) AMD64
  
  Linux :
  X11; Linux ppc
  X11; Linux ppc64
  X11; Linux i686
  X11; Linux x86_64

  Mac :
  Macintosh; PPC Mac OS X
  Macintosh; Intel Mac OS X
  
  Solaris :
  X11; SunOS i86pc
  X11; SunOS sun4u
  
  Windows:
  Windows NT 6.1 对应操作系统 windows 7
  Windows NT 6.0 对应操作系统 windows vista
  Windows NT 5.2 对应操作系统 windows 2003
  Windows NT 5.1 对应操作系统 windows xp
  Windows NT 5.0 对应操作系统 windows 2000
  Windows ME
  Windows 98

2、加密等级标识 :
  N: 表示无安全加密
  I: 表示弱安全加密
  U: 表示强安全加密

3、浏览器语言 :
  在首选项 > 常规 > 语言中指定的语言

4、渲染引擎 :
  浏览器 使用 Presto 渲染引擎,格式为: Presto/版本号

5、版本信息 :
  显示 浏览器 真实版本信息,格式为: Version/版本号
 
二、User-Agent的历史变迁

最早的时候有一个浏览器叫NCSA Mosaic,把自己标称为NCSA_Mosaic/2.0 (Windows 3.1),它支持文字显示的同时还支持图片,于是Web开始好玩起来。 Netscape想逗Microsoft玩儿,把Windows叫做“几乎不曾做过调试的设备驱动器”,后者很恼火。Microsoft于是推出了自己的 网页浏览器,叫做Internet Explorer,希望它能成为“Netscape终结者”。Internet Explorer也支持框架,但它不是Mozilla啊,所以没人给它发送带有框架的页面。Microsoft慢慢烦躁起来,不再寄希望于网站管理员逐渐 认识IE并给它发框架,而是宣称自己是“兼容Mozilla”的,开始模仿Netscape,把自己标称为Mozilla/1.22 (compatible; MSIE 2.0; Windows 95),这样Internet Explorer也能收到框架了,整个Microsoft狂喜,但网站管理员开始有点被搞糊涂了。 Gecko表现优秀,IE则很差劲,于是身份甄别再次发生,输送给Gecko的是设计良好的网页代码,其他浏览器就没有这个待遇了。Linux的跟随者很伤心,因为他们创建了基于KHTML引擎支持的Konqueror,但却不会被输送好代码,虽然他们自己认为KHTML和Gecko一样优秀,于是Konquerer开始伪装自己“像Gecko”那样以得到好的网页,并标称自己为Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko),这个世界更让人困惑了.Apple开发了Safari,使用了KHTML,同时也增加了很多新特性,后来干脆一锅煮,另起炉灶叫了WebKit,但是它有希望能够得到那些为KHTML编写的网页,于是Safari标称自己为Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5,这个世界更混乱了。Microsoft越来越担心Firefox的发展,重新启动了Internet Explorer的开发,标称自己为Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ,可以很好的渲染代码,但那要看网站管理员是否指示它这么做。Google也开发了自己的浏览器Chrome,使用了Webkit,有点像Safari,希望能得到为Safari编写的网页,于是决定装成Safari。这样啊,Chrome使用了WebKit渲染引擎,想装成Safari,而WebKit呢又伪装自己是KHTML,KHTML呢又是伪装成Gecko的,同时所有的浏览器又都宣称自己是Mozilla,于是,Chrome宣称自己是Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13,,UserAgent字符串彻底混乱了,也几乎不再发挥任何作用,每个人都宣称自己是别人,混乱充斥人间啊。

 
三、User-Agent的作用

根据前面介绍的user-agent的历史我们知道,通过user-agent不能完全准确的判断是属于那款浏览器。由于UA字符串在每次浏览器HTTP 请求时发送到服务器,所以服务器就可以根据它来做好多事。

比如:
1、统计用户浏览器使用情况。有些浏览器说被多少人使用了,实际上就可以通过判断每个IP的UA来确定这个IP是用什么浏览器访问的,以得到使用量的数据。
2、根据用户使用浏览器的不同,显示不同的排版从而为用户提供更好的体验。有些网站会根据这个来调整打开网站的类型,如是手机的就打开wap,显示非手机的就打开pc常规页面。用手机访问谷歌和电脑访问是不一样的,这些是谷歌根据访问者的UA来判断的。

既然知道了UA的作用,那么其实客户端也可以使用UA来做一些神奇的事。
比如:伪装 user agent 来回避某些侦测特定浏览器才能读取的网站。

如果使用Firefox浏览器插件User agent switcher,用户就可以轻松地在不同UA之间切换,把自己伪装成其他浏览器。这样就可以在PC上预览WAP或移动格式的网页,比如专门为iPhone设计的页面。

四、User-Agent的获取

java中:

request.getHeader("User-Agent");

给出一个在JSP中利用User-Agent来显示用户浏览器和操作系统的例子(使用f方法库中的fn:contains(String str1;String str2)):
UserAgent.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %><body>   header['User-Agent']="${header['User-Agent'] }";<br/><br/>您使用<c:if test="${fn:contains(header['User-Agent'],'MSIE') }">IE浏览器</c:if><c:if test="${fn:contains(header['User-Agent'],'Firefox') }">火狐浏览器</c:if><c:if test="${fn:contains(header['User-Agent'],'Maxthon') }">Maxth浏览器</c:if><c:if test="${fn:contains(header['User-Agent'],'MyIE2') }">MyIE2浏览器</c:if><c:if test="${fn:contains(header['User-Agent'],'Opera') }">Opera浏览器</c:if><c:if test="${fn:contains(header['User-Agent'],'TencentTraveler') }">腾讯Traveler浏览器</c:if><c:if test="${fn:contains(header['User-Agent'],'TheWorld') }">世界之窗浏览器</c:if><c:if test="${fn:contains(header['User-Agent'],'Kubuntu') }">Kubuntu浏览器</c:if><c:if test="${fn:contains(header['User-Agent'],'Windows')}">Windows操作系统</c:if><c:if test="${fn:contains(header['User-Agent'],'windows' )}">windows操作系统</c:if><c:if test="${fn:contains(header['User-Agent'],'Linux')}">Linux操作系统</c:if><c:if test="${fn:contains(header['User-Agent'],'linux' )}">linux操作系统</c:if><c:if test="${fn:contains(header['User-Agent'],'SunOS')}">SunOS操作系统</c:if><c:if test="${fn:contains(header['User-Agent'],'Mac' )}">Mac操作系统</c:if></body>

笔者机器上的运行结果:
这里写图片描述

0 0