There can be no Triumph without Loss,No Victory without Suffering,No Freedom without Sacrifice.
All you have to decide is what to do with the time that is given to you.
Get busy Living, or Get busy Dying?
  首页 | 留言给我 | 订阅 Rss | CLI | 黄白之恋 Posts:158   Hits: 5582527    Comments: 173    
 日历归档
<<  <  2024 - 12  >  >>
SuMoTuWeThFrSa
1234567
891011121314
15161718192021
22232425262728
293031
 About Me
 Name: ZhangSichu
 Sex: Male
 Age: 32
 Email: ZhangSichu@gmail.com
 MSN: ZhangSichu@hotmail.com
 Home: ZhangSichu.com
 WeiBo: weibo.com/zhangsichu
 个人推荐
 分类归档
  ·C++/C(5)  RSS
  ·软件工程(1)  RSS
  ·杂事/随感(26)  RSS
  ·.Net/Java(30)  RSS
  ·面向对象程序设计(5)  RSS
  ·汇编/破解(0)  RSS
  ·平面设计(3)  RSS
  ·SQL(5)  RSS
  ·COM/COM+(2)  RSS
  ·Web开发(81)  RSS
 My Friends
Back Forward Refresh Home 2024年12月9日 星期一 RSS CLI Mine Sweeper. In Javascript.

  Baidu悄悄的做了些什么
字体大小 [ ]

今天访问baidu的时候,fiddler正好开着。发现截获的http请求中有两个请求比较奇怪。如下图:

Click to Open in New Window

其中的第3个请求和第4个请求。请求的地址都比较长。
第3个请求的地址是 http://c.baidu.com/c.gif?t=0&q=%B2%E2%CA%D4&p=0&pn=1
第4个请求的地址是 http://s.baidu.com/w.gif?path=http://www.baidu.com/s?wd=%B2%E2%CA%D4&cl=3&t=1192698536690
这两个请求都是要求获得一个gif图片。但是都带了参数。请求图片带参数。第3个请求的状态码是204表示无内容。第4个请求的状态码是200表示请求正常。可是发现这两个请求返回的Content-Length都是0。表明服务器没有返回给用户任何gif图片的数据。在baidu 的html中找到了这两个图片

Click to Open in New Window

就是这两个style=”display:none” 的img,其中一个img是用javascript动态用document.write写入的。
由于这两个图片的style=”display:none” 说明这两个图片是永远不会被显示出来的。那么这两个图片在这里到底有什么用呢。
可能这个问题只有baidu知道。

在baidu搜索了一些其它的关键字,这两个隐藏的img依然存在。看来这两个没有内容的图片,每一个页面都会去请求。在baidu搜索结果返回的html中,每个搜索到的链接都带了类似相同的onclick事件处理。

Click to Open in New Window

都是 onclick=”return c(***,this.innerHTML,this.href,*)” 都调用c方法。
Javascript c方法的内容:
function c(e,b,u,s,p,t){if(document.images){var p=window.document.location.href;var t=new Date().getTime();b=b.replace(/<[^<>]+>/g, "");(new Image()).src="http://s.baidu.com/w.gif?query=%B2%E2%CA%D4&e="+e+"&title="+b+"&url="+escape(u)+"&spos="+s+"&path="+p+"&t="+t;}return true;}


Javascript c方法new了一个Image。设置这个Image的src为http://s.baidu.com/w.gif?query=%B2%E2%CA%D4&e="+e+"&title="+b+"&url="+escape(u)+"&spos="+s+"&path="+p+"&t="+t;
当点击link。onclick事件被触发。这个src地址被请求。

Click to Open in New Window

请求的结果还是一个没有内容的图片。

看到这里,最前面那两个没有返回内容的图片请求,应该和这个请求做了类似的事。这个请求应该是通过参数post到服务器为这个链接记录点击次数,因为在点击链接时这个javascript才会被触发,才会发出这个请求。服务器通过记录搜索结果中每个链接的点击次数,从而决定每个链接在搜索结果中的排名顺序。那么前面的两个请求也应该是用这种方式来post参数到服务器。让服务器记录下些什么。

为什么baidu要使用这样的方式给服务器发数据呢。一般使用 <script src=”http://xxx.com/api.aspx?para1=value1&para2=value” ></script>这种方式发数据给服务器。服务器还可以返回一段Javascript操作Dom。同时服务器也不需要做特殊的设置。这里Baidu访问了一个.gif地址。由于请求的是一个.gif,默认图片的链接,服务器默认会去取一张图片。不会经过Web服务器端的Module和Handle来处理。在这里服务器上应该用了Url Rewrite技术或者直接指定了.gif为一个特殊的扩展名,有个特殊的Handle来处理。

究竟Baidu为什么要用img的src来post数据给服务器?是要绕过XmlHttpRequest的跨域问题,是只Post不关心返回内容,而不使用script的src来post数据,估计这只有Baidu自己知道吧。

google 也做了类似这样的事情。不过google比百度记录的要多。
google 不光统计点击,甚至记录了用户是否在某个搜索结果的链接上悬停过。鼠标在某个区域活动的比较多。
用户鼠标移动的顺序位置。
google 的Script 混淆后比较难懂 http://www.google.cn/extern_js/f/CgV6aC1DThICY24rMAo4ASw/TXlNyPshIOk.js
  Posted @ 10/18/2007 10:40:48 PM | Hits (47831) | Comment (0

  Post Comment
标题 *
作者 *
密码 记住我
评论 *
    


Stable in Firefox 1.5 2.0Stable in IE6 IE7Stable in MozillaStable in Netscape
ZhangSichu.com V0.1.7507
Powered By ZhangSichu
Copyright © ZhangSichu
Download ZhangSichu.com source code. Download source code