预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共95页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

一.浏览器工作原理拆解分析 本文将深入的研究当你输入一个网址的时候,后台到底发生了一件件什么样的事~ 1.首先嘛,你得在浏览器里输入网址: 2.浏览器查找域名的IP地址 导航的第一步是通过访问的域名找出其IP地址。DNS查找过程如下: 浏览器缓存–浏览器会缓存DNS记录一段时间。有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)。 系统缓存–如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用(windows里是gethostbyname)。这样便可获得系统缓存中的记录。 路由器缓存–接着,前面的查询请求发向路由器,它一般会有自己的DNS缓存。 ISPDNS缓存–接下来要check的就是ISP缓存DNS的服务器。在这一般都能找到相应的缓存记录。 递归搜索–你的ISP的DNS服务器从跟域名服务器开始进行递归搜索,从.com顶级域名服务器到Facebook的域名服务器。一般DNS服务器的缓存中会有.com域名服务器中的域名,所以到顶级服务器的匹配过程不是那么必要了。 DNS递归查找如下图所示: DNS有一点令人担忧,这就是像wikipedia.org或者facebook.com这样的整个域名看上去只是对应一个单独的IP地址。还好,有几种方法可以消除这个瓶颈: HYPERLINK"http://baike.baidu.com/view/1527368.html"\t"_blank"循环DNS是DNS查找时返回多个IP时的解决方案。举例来说,Facebook.com实际上就对应了四个IP地址。 HYPERLINK"http://baike.baidu.com/view/486970.htm"\t"_blank"负载平衡器是以一个特定IP地址进行侦听并将网络请求转发到集群服务器上的硬件设备。一些大型的站点一般都会使用这种昂贵的高性能负载平衡器。 地理DNS根据用户所处的地理位置,通过把域名映射到多个不同的IP地址提高可扩展性。这样不同的服务器不能够更新同步状态,但映射静态内容的话非常好。 HYPERLINK"http://baike.baidu.com/view/1398775.htm"\t"_blank"Anycast是一个IP地址映射多个物理主机的路由技术。美中不足,Anycast与TCP协议适应的不是很好,所以很少应用在那些方案中。 大多数DNS服务器使用Anycast来获得高效低延迟的DNS查找。 3.浏览器给web服务器发送一个HTTP请求 因为像Facebook主页这样的动态页面,打开后在浏览器缓存中很快甚至马上就会过期,毫无疑问他们不能从中读取。 所以,浏览器将把一下请求发送到Facebook所在的服务器: GEThttp://facebook.com/HTTP/1.1Accept:application/x-ms-application,image/jpeg,application/xaml+xml,[...]User-Agent:Mozilla/4.0(compatible;MSIE8.0;WindowsNT6.1;WOW64;[...]Accept-Encoding:gzip,deflateConnection:Keep-AliveHost:facebook.comCookie:datr=1265876274-[...];locale=en_US;lsd=WW[...];c_user=2101[...] GET这个请求定义了要读取的URL:“http://facebook.com/”。浏览器自身定义(User-Agent头),和它希望接受什么类型的相应(AcceptandAccept-Encoding头).Connection头要求服务器为了后边的请求不要关闭TCP连接。 请求中也包含浏览器存储的该域名的cookies。可能你已经知道,在不同页面请求当中,cookies是与跟踪一个网站状态相匹配的键值。这样cookies会存储登录用户名,服务器分配的密码和一些用户设置等。Cookies会以文本文档形式存储在客户机里,每次请求时发送给服务器。 用来看原始HTTP请求及其相应的工具很多。作者比较喜欢使用fiddler,当然也有像FireBug这样其他的工具。这些软件在网站优化时会帮上很大忙。 除了获取请求,还有一种是发送请求,它常在提交表单用到。发送请求通过URL传递其参数(e.g.:HYPERLINK"http://robozzle.com/puzzle.aspx?id=85"http://robozzle.com/puzzle.aspx?id=85)。发送请求在请求正文头之后发送其参数。 像“http://fac