从http协议看百度360大战
前段时间甚嚣尘上的3B大战,慢慢退出人们的视线,但是两家公司的战争才刚刚开始,一家是资金技术实力雄厚的搜索引擎巨头,一家是携客户端之威,行事诡谲的数字公司。谁会取得最后的胜利?我们在看热闹之外,也来学习一下云端和客户端是如何通过HTTP协议过招的。
360以客户端见长,360安全卫士,以安全为名,占据着用户电脑的最高权限,用户通过360浏览器上网,用户的所有上网行为,360完全知晓。而百度作为一家网站,在用户电脑上只是一些文本文件,所能做的实在不多,360占据天时地利。百度所选择的策略是,拒绝360spider的抓取,提醒通过360浏览器,和360搜索过来的用户,将百度设置为主页等很被动的措施。
这里百度首先需要解决下面几个问题:
1.如何判断360spider对百度网站的抓取
2.怎么判断用户是通过360浏览器访问过来的
3.怎么判断用户是通过360搜索过来的
先来看看http协议
http协议是万维网(worldwide web)交换信息的基础,工作在TCP/IP协议体系中的TCP协议上。
HTTP协议的主要特点可概括如下:
1、支持客户/服务器模式。
2、 简单快速: HTTP协议简单,使得HTTP服务器的程序规模小,通信速度很快。
3、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4、无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。
5、无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。
HTTP请求浅析
http请求由三部分组成,分别是:请求行、请求报头,消息正文(可选)组成,由浏览器进行拼装,不同浏览器行为略有差异。
我们使用firebug来看看,当我们在浏览器中输入www.baidu.com时,浏览器到底干了什么?
首次访问(访问之前清除了cookie):
第二次访问:
第二次访问与第一次访问的区别是多了Cookie:一行。我们看看第二次访问的请求头:
GET / HTTP/1.1
Host: www.baidu.com
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: BAIDUID=CFA7693D654C7B6963AE9E59412B841A:FG=1
第一行为请求行:
请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:Method Request-URI HTTP-Version CRLF
正对上面例子中的 GET / HTTP/1.1
第二行开始为请求报头:
一个空行表示请求报头结束
Host: www.baidu.com 该报头域是必须的,指明域名地址
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:15.0)Gecko/20100101 Firefox/15.0.1 该报头域将浏览器、操作系统信息告诉服务器
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8该报头域用于指定客户端接受哪些类型的信息
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 报头域用于指定客户端接受哪些语言的信息,服务器根据
Accept-Encoding: gzip, deflate 用于指定可接受的内容编码。deflate编码是由RFC 1950 [31]定义的"zlib"编码格式与RFC 1951 [29]里描述的"deflate"压缩
机制的组合的产物。
Connection: keep-alive Keep-Alive模式(又称持久连接、连接重用)时,Keep-Alive功能使客户端到服 务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。
Cookie: BAIDUID=CFA7693D654C7B6963AE9E59412B841A:FG=1 cookie是网页在本地留下的小片段信息,记录登陆用户ID等信息。
我们看user-Agent报头域,指明了浏览器和操作系统等信息,user-agent,用户代理,顾名思义,浏览器和spider作为用户的代理向网站服务器请求页面,所以在这个报头域中指明了自己的身份,不同的浏览器或者搜索引擎的spider都会有自己的标志,百度可以根据这个值,拒绝360蜘蛛的抓取和区别对待来自360浏览器的访问。当然360spider会千方百计的隐藏自己的身份,那么百度就需要靠另外的办法来进行甄别了,spider访问会有一些与正常访问不一样的行为,这里不细表。
从360搜索里面进入百度主页,与直接进入百度主页展示是不一样的,百度是怎么知道用户是从360进入的呢?
我们从360搜索里面进入百度主页,看请求信息,发现了端倪:
GET / HTTP/1.1
Host: www.baidu.com
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://www.so.com/s?q=%E7%99%BE%E5%BA%A6&pq=%E8%B4%B4%E5%90%A7&_xv=331&_re=0&src=srp
Cookie: BAIDUID=CFA7693D654C7B6963AE9E59412B841A:FG=1
区别就在这个Referer报头域上,referer报头域,记载用户是从哪个URL出发访问当前请求的页面,这个是由浏览器自动填写的。百度可以在web服务器层面针对referer报头域不同的值进行判断处理,给来自360搜索的页面请求,加上一些提醒。
HTTP响应
响应也分为三个部分状态行、响应报头、响应正文
HTTP/1.1 200 OK
Date: Sun, 07 Oct 2012 17:47:42 GMT
Server: BWS/1.0
Content-Length: 5027
Content-Type: text/html;charset=gbk
Cache-Control: private
Expires: Sun, 07 Oct 2012 17:47:42 GMT
Content-Encoding: gzip
Connection: Keep-Alive
第一行为状态行:
状态行格式如下:HTTP-VersionStatus-Code Reason-Phrase CRLF
HTTP/1.1 200 OK http协议版本 状态码200 状态码含义OK
第二行开始为响应报头:
Date: Sun, 07 Oct 2012 17:47:42 GMT 响应时间
Server: BWS/1.0 服务器信息 BWS为百度自己开发或定制的,安全性很高
Content-Length: 5027 响应正文长度
Content-Type: text/html;charset=gbk 正文类型
Cache-Control: private用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制)
Expires: Sun, 07 Oct 2012 17:47:42 GMT 实体报头域给出响应过期的日期和时间。与date时间一致,说明是不需要缓存的。
Content-Encoding: gzip 编码类型,gzip压缩类型,可提高响应速度
Connection: Keep-Alive 保持连接模式
以空行隔开的第三部分为响应正文:
也就是网页信息
参考:
http://my.oschina.net/u/260739/blog/66464
http://www.phpben.com/?post=77
http://zh.wikipedia.org/wiki/%E8%B6%85%E6%96%87%E6%9C%AC%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE
从http协议看百度360大战相关推荐
- 从SEO效果看谷歌百度360搜狗有道bing技术现状
为什么80%的码农都做不了架构师?>>> 从SEO效果看谷歌百度360搜狗有道bing技术现状声音 maybe yes 发表于2015-08-20 16:52 原文链接 : h ...
- 360大战腾讯,不明真相网友六问“周大人”
题记:这是一个网友写的文章,很不错,想必代表了广大网民的心声和疑虑.我们越来越发现,360的产品越来越离谱,不是根据产品本身性质来定性产品善恶,而是根据对方是否为自己的竞争对手来判定该软件产品是否为恶 ...
- 奇虎360大战腾讯QQ 高潮迭起用户受伤
原文地址:奇虎360大战腾讯QQ 高潮迭起用户受伤 虽然我也是不可避免的QQ用户,但是自从360开始揭露腾讯QQ涉及扫描用户隐私引发的这场高潮迭起的比拼谁更淫荡谁更无耻的战争中,我心中的一碗水一直端的 ...
- 百度360之争的背后
春秋战国是我国历史上思想文化的最高峰,可以说,即使是今天,也不曾回归到当初的境界.原因很简单,自秦始皇一统天下,焚书坑儒,其后虽分分合合,几十次改朝换代,但环境并没有根本改善,天下仍然是一统再统,环境 ...
- 有多少人等着看百度区块链的笑话?
哀其不幸,怒其不争.--鲁迅 提起百度,很多人的反应都是摇摇头,沉默许久后,只吐出两个字: 不行. 这并不难理解.对比腾讯和百度Q3的财报,百度一如既往地输得很惨.腾讯今年Q3财报显示,腾讯Q3营收8 ...
- 三千字乱弹QQ和360大战【慎入】
我承认我对于360抱着偏见,但是这同我无关,我一向的口吻是:如果我对你有偏见,那么是你自己造成的,同我无关. 关于周鸿祎的林林总总江湖上的人都知道,不多言 -------------我是无敌分割线-- ...
- 百度工具问题如何申请百度 360 谷歌等新闻源
[百度工具问题]如何申请百度 360 谷歌等新闻源 百度工具问题如何申请百度 360 谷歌等新闻源 标签:内容中级迟缓之箭,完成快速的第二击. 金币兑换系统的开放,就是目前正值最后建筑进程中的行会驻地 ...
- 用户视角看百度移动:从流量集散地到流量目的地
文 | 李永华 来源 | 螳螂财经(ID:TanglangFin) 仅从数据上看,如果用一句话描述当前的BAT,那就是"你大爷还是你大爷".尤其是百度,位置比想象中要牢靠得多. 在 ...
- 从子域名看百度,新浪,搜狐,QQ和网易
从二级域名看百度,新浪,搜狐,QQ和网易 本来想写一篇关于百度产品的分析,写了一半发现题目太大,写不下去了.干脆自己八卦一下. 网易的子域名:108 个: QQ的子域名:102 个: 新浪子域名:86 ...
最新文章
- 基于UDP的组播网络程序
- HTML粘性滑块导航源码-可用来做首页
- 【BZOJ2594】水管局长加强版,LCT+并查集+二分查找位置
- oracle 12.2.0.1 使用 active dataguard broker 之二 switchover
- 人脸生成识别 Towards Pose Invariant Face Recognition in the Wild
- Linux用管道移动文件夹,linux常用命令(示例代码)
- 如何批量修改图片宽高尺寸
- python简单好玩的代码_Python 趣味打怪:147 段简单代码助你从入门到大师
- php amr时长,amr是什么文件
- 面向初学者的 Python IDE:Thonny,你值得一试
- 如何让地面不起灰_水泥地面起灰怎么办?老师傅6招搞定了
- 微信公众号推送功能代码及详解
- W ndows7蓝屏0x00000024,Win7蓝屏代码0x00000024修复方法
- opencv二值化的cv2.threshold函数
- QTableView和QTableWidget的区别是什么?
- 9V充3.7V锂电池,12V充3.7V单节锂电池充电芯片和电路图
- 首届全国智能制造(中国制造2025)创新创业大赛
- Angelababy顺产生子,做女人当如Angelababy!
- 一个简单可用的C++日志类
- 【递归】-C语言 一些题目
热门文章
- 旧作 一剪梅•秋夜
- 【附源码】Python计算机毕业设计特大城市地铁站卫生防疫系统
- Unity 工具之 获取当前所在城市的天气数据的封装(自动定位当前所在城市,天气数据可以获得多天天数据)
- 在使用集合中的contains(),要根据实际情况改写集合中对象的equals(Object obj)方法------改写List集合中equals(Object obj)的方法
- 解决Cookie乱码问题
- TexturePacker的免费key获取方式
- ESXi主机定时开关机设置
- H5项目常见问题及注意事项
- 思科网络安全 第十一章测验答案
- HAUTOJ 1262 魔法宝石