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: 5544936 Comments: 173
日历归档
<<
<
2024
-
11
>
>>
Su
Mo
Tu
We
Th
Fr
Sa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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)
·
软件工程
(1)
·
杂事/随感
(26)
·
.Net/Java
(30)
·
面向对象程序设计
(5)
·
汇编/破解
(0)
·
平面设计
(3)
·
SQL
(5)
·
COM/COM+
(2)
·
Web开发
(81)
My Friends
Steven's Blog
Xinyu's Blog
AlonePlayer's Record
ShenGuangtao's 幻城
ZitingLiu 一起去旅行
DaBin's ColorSky
LiQin's Blog
J2.NETe 聪明正直
Li Pengbo's Blog
葡萄城控件技术
2024年11月22日 星期五
Baidu悄悄的做了些什么
字体大小 [
大
中
小
]
今天访问baidu的时候,fiddler正好开着。发现截获的http请求中有两个请求比较奇怪。如下图:
其中的第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中找到了这两个图片
就是这两个style=”display:none” 的img,其中一个img是用javascript动态用document.write写入的。
由于这两个图片的style=”display:none” 说明这两个图片是永远不会被显示出来的。那么这两个图片在这里到底有什么用呢。
可能这个问题只有baidu知道。
在baidu搜索了一些其它的关键字,这两个隐藏的img依然存在。看来这两个没有内容的图片,每一个页面都会去请求。在baidu搜索结果返回的html中,每个搜索到的链接都带了类似相同的onclick事件处理。
都是 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地址被请求。
请求的结果还是一个没有内容的图片。
看到这里,最前面那两个没有返回内容的图片请求,应该和这个请求做了类似的事。这个请求应该是通过参数post到服务器为这个链接记录点击次数,因为在点击链接时这个javascript才会被触发,才会发出这个请求。服务器通过记录搜索结果中每个链接的点击次数,从而决定每个链接在搜索结果中的排名顺序。那么前面的两个请求也应该是用这种方式来post参数到服务器。让服务器记录下些什么。
为什么baidu要使用这样的方式给服务器发数据呢。一般使用 <script src=”
http://xxx.com/api.aspx?para1=value1¶2=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 (
47800
) | Comment (
0
)
Post Comment
标题
*
作者
*
密码
记住我
评论
*
ZhangSichu.com V0.1.7507
Powered By ZhangSichu
Copyright © ZhangSichu
Download source code
陕ICP备05000130号