User-Agent简介及应用

在http协议里,头信息中有一个 User-Agent,它的作用是告诉服务器,用户客户端是什么浏览器,以及操作系统的信息的。在某些特殊的情况下,服务器根据浏览器的不同类型,输出不 同的内容。大概在三四年前,很多网站都只显示给IE看,所以当时的 opera 浏览器还特别做了一个功能,可以把它的 User-Agent 换成 IE 的。所以 user-agent 是非常不可靠的,原因就是它是客户端自己决定并发送给服务器。

有一种SEO的技术,就是判断 user-agent,如果是搜索引擎的爬虫,就把内容显示出来,否则的话,只显示给付费用户。所以有的网站能够被Google搜索到,点击链接进去以后 却显示“未注册”、“还不是会员”。解决的办法,Firefox有个插件叫做 Agent-switcher,它可以自动替换 http 请求里的 user-agent 头的内容。 [插件下载:https://addons.mozilla.org/en-US/firefox/addon/59/]

IE要修改注册表,这里有一个办法:

把下列代码保存为 ua.reg,双击导入到注册表中:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent]
@="Googlebot/2.1"
"Compatible"="+http://www.googlebot.com/bot.html" 

User-Agent也可以使用 javascript 取到,BOM中的 navigator.userAgent就是了。也是在几年前,写浏览器兼容代码的时候,常常判断navigator.userAgent。不过现在不流 行了,因为这是一种不好的方式。首先是浏览器会伪造user-agent,比如刚才说的opera,其次是用户可以伪造,上面说的IE和FF的方法。其 次,一种浏览器的某个版本不支持某种特性或者功能,不意味着它永远不支持,目前支持的,将来也不一定还有(虽然一般都会向后兼容)。所以现在一般用对象检 测的方法,代替浏览器检测。
比如 var W3CDOM = document.createElement && document.getElementsByTagName;

下面是一些常见的user-agent:
我的IE6.0: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; WPS; Maxthon; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET
我的FF3.0: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9) Gecko/2008052906 Firefox/3.0
google爬虫的: Googlebot/2.1 (http://www.googlebot.com/bot.html)

今天因为遇到搜资料时,到一个网站,提示我要注册。就在想是否用了SEO技术,于是装了agent-switcher,换成googlebot结果还是不行。可能除了user-agent还判断了其他东西。
后来,在访问我自己搭建的moinmoin服务器时,发现很多页面都访问不了,提示”You are not allowed to access this!”,google了一会,也没找到有用的内容。于是在moinmoin的目录下grep提示的那句话,一下就找到了。因为moinmoin会保 持用户登陆状态(应该是在 cookie 里记录了),结果url里就会多出来一些query-string,而如果user-agent是搜索引擎,而url里又有query- string,moinmoin就会禁止掉了。
判断的代码是:(在site-packages/MoinMoin/request/__init__.py里)
1001     def isForbidden(self):
1002         “”” check for web spiders and refuse anything except viewing “””
1003         forbidden = 0
1004         # we do not have a parsed query string here, so we can just do simple matching
1005         qs = self.query_string
1006         action = self.action
1007         if ((qs != ” or self.request_method != ‘GET’) and
1008             action != ‘rss_rc’ and
1009             # allow spiders to get attachments and do ‘show’
1010             not (action == ‘AttachFile’ and ‘do=get’ in qs) and
1011             action != ‘show’ and
1012             action != ‘sitemap’
1013             ):
1014             forbidden = self.isSpiderAgent

from: http://zsuxqm.blog.163.com/blog/static/64678120085303220914/   [有小幅改动]

发表评论?

1 条评论。

  1. 改了以后可以改回来么?

发表评论