注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

云淡风轻

云淡风轻近午天,傍花随柳过前川。

 
 
 

日志

 
 

User-Agent  

2008-06-30 15:22:00|  分类: 格物致知 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
    在http协议里,头信息中有一个 User-Agent,它的作用是告诉服务器,用户客户端是什么浏览器,以及操作系统的信息的。在某些特殊的情况下,服务器根据浏览器的不同类型,输出不同的内容。大概在三四年前,很多网站都只显示给IE看,所以当时的 opera 浏览器还特别做了一个功能,可以把它的 User-Agent 换成 IE 的。所以 user-agent 是非常不可靠的,原因就是它是客户端自己决定并发送给服务器。
     有一种SEO的技术,就是判断 user-agent,如果是搜索引擎的爬虫,就把内容显示出来,否则的话,只显示给付费用户。所以有的网站能够被Google搜索到,点击链接进去以后却显示“未注册”、“还不是会员”。解决的办法,Firefox有个插件叫做 Agent-switcher(安装),它可以自动替换 http 请求里的 user-agent 头的内容。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里)
Python代码: MoinMoin里禁止搜索引擎的代码
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


  评论这张
 
阅读(1060)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017