用户在浏览器中输入网址,计算机提取出域名;
浏览器通过DNS查找域名对应的IP地址,获得IP地址后;
尝试与对应的服务器建立TCP连接,连接成功之后;
将用户的请求装入http数据包,通过建立的tcp连接发送给服务器,等待数据返回;
如果数据成功返回,比如说,返回的是一个html页面,则渲染这个页面(可以理解为显示出来);
渲染的过程中会遇到一些数据标记,比如图片,这时候就查找本地缓存,如果缓存里有且没过期,就使用本地缓存的数据,否则就向服务器发送请求。
HTTP协议的作用原理:
连接: Web浏览器与Web服务器建立连接,打开一个称为socket (套接字) 的虚拟文件,此文件的建立标志着连接建立成功;
请求: Web浏览器通过socket向Web服务器提交请求,HTTP的请求一般是GET或POST命令(POST用于FORM参数的传递);
GET命令的格式为:GET 路径/文件名HTT文件名指出所访问的文件,HTTP/1.0指出Web浏览器使用的HTTP版本;
应答: Web浏览器提交请求后,通过HTTP协议传送给Web服务器;
Web服务器接到后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面。
导航的第一步是通过访问的域名找出其IP地址。DNS查找过程如下:
浏览器缓存 – 浏览器会缓存DNS记录一段时间。 有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)。
系统缓存 – 如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用(windows里是gethostbyname)。这样便可获得系统缓存中的记录。
路由器缓存 – 接着,前面的查询请求发向路由器,它一般会有自己的DNS缓存。
ISP DNS 缓存 – 接下来要check的就是ISP缓存DNS的服务器。在这一般都能找到相应的缓存记录。
递归搜索 – 你的ISP的DNS服务器从跟域名服务器开始进行递归搜索,从.com顶级域名服务器到Facebook的域名服务器。一般DNS服务器的缓存中会有.com域名服务器中的域名,所以到顶级服务器的匹配过程不是那么必要了。
DNS递归查找如下图所示:
DNS有一点令人担忧,这就是像wikipedia.org 或者 facebook.com这样的整个域名看上去只是对应一个单独的IP地址。还好,有几种方法可以消除这个瓶颈:
循环 DNS 是DNS查找时返回多个IP时的解决方案。举例来说,Facebook.com实际上就对应了四个IP地址。
负载平衡器 是以一个特定IP地址进行侦听并将网络请求转发到集群服务器上的硬件设备。 一些大型的站点一般都会使用这种昂贵的高性能负载平衡器。