首先当用户在浏览器的地址栏中敲入了网站的网址 ( 好比: alibaba.com ) ,这时浏览器会首先经过访问的域名来定位到IP (DNS) 从而找到去哪里获取资源, 这时, 浏览器会依次进行以下查找:css
1. 浏览器缓存 :html
浏览器首先会在本身的缓存中查找有没有对应的域名 – IP匹配, 若是好运的话, 这里就能够直接尝试去访问资源了, 若是运气平平则往下走吧.前端
2. 系统缓存 :算法
浏览器缓存中没有命中, 浏览器会告诉操做系统:”嘿, 我在我本身口袋里没找到, 可能丢了, 我得去你那看看”, 而后, 一个系统进程(?)调取系统中的DNS缓存进行查询, 重复上一条的运气判断…数据库
3. 路由器缓存 :浏览器
走到这, 运气还真不太好啊, 操做系统也没辙了, 那怎么办呢, 向路由去要要看吧… 重复运气判断…缓存
4. ISP DNS缓存 :服务器
好吧, 真不知道说运气好仍是运气很差了, 不废话, 去ISP (网络提供商) 的DNS缓存服务器中寻找了, 通常状况下, 在ISP端的缓存中都能找到相应的缓存记录了, 不应这么背了, 或者… 您的ISP有够菜…网络
5. 递归搜索…网站
最无奈的状况发生了, 在前面都没有办法命中的DNS缓存的状况下, ISP的DNS服务器开始从root域名服务器开始进行递归, 顺序是从.com顶级域名服务器到alibaba的域名服务器, 再没找到…好吧, 您认为您要去的网站真的公开存在么…?
两个KEY POINT:
首先咱们想一想,咱们要和接线员通话是否是要约定一个你们都能听得懂的语言,不然我说中文他说英语,这样就谁也听不懂谁的话,也不会完成通话,那么这个约定的语言是什么呢?那就是HTTP协议。
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为普遍的一种网络协议。全部的WWW文件都必须遵照这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
咱们能够把它理解成一种浏览器和服务器都遵循的一种语法规范,全部的信息都是经过这种语法规范传输的,这样浏览器和服务器均可以正确的理解。
浏 览器和服务器通常并非直接链接上的,而是须要经过中间的网络设备,就像咱们的声音并非直接传到接线员的耳朵里,而是要经过电话线经过电波传送同样,浏 览器和服务器所发送的遵循HTTP协议的信息也要经过网络设备的传递才能被对方所接收。而这就须要一种在网络设备(网线)上传输数据的一种通用的语法规范 (协议)。这样的协议使用最多的有2种:TCP协议和UDP协议
下面让咱们来看看咱们浏览网页的时候发生了什么吧。
1.首先咱们在地址栏上输入咱们想要打开的网址,而后咱们一般会按下回车。这样一个请求就由浏览器以一种知足http协议的请求报文的形式发往服务器,请求报文中包含了要请求的页面地址,请求的文件类型等一系列信息。
2.在请求报文传递至客户端得网络设备的时候,网络设备把请求报文包装在一个知足TCP协议的数据中,经过网线传向服务器的网络设备。
3.服务器的网络设备接收到数据后,使用特殊的算法将数据解译,从新恢复成浏览器发出知足http协议的请求报文的形式,而后传向服务器软件。
4.服务软件获得请求报文后,根据请求报文所请求的页面地址在服务器的数据库中找到相应的页面,而后生成知足http协议的响应报文发向浏览器。响应报文中包括了响应报文头和被请求页面的代码(响应报文体)。
5.一样的,响应报文经过服务器的网络设备,被包装在一个知足TCP协议的数据,经过网线传向客户端的网络设备。
6.客户端的网络设备将响应报文解析,而后传给浏览器软件,浏览器在将响应报文解析,这样咱们就在浏览器上看到了想要看到的网页。
B/S(Browser/Server)结构就是浏览器/服务器结构,它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工做界面是经过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,可是主要事务逻辑在服务器端(Server)实现,造成所谓三层3-tier结构。本文将主要讲解浏览器和服务器通讯的过程。
浏览器和服务器之间的通信并非看上去那么简单,里面仍是有着许多的门道的。想要简单理解浏览器和服务器之间的通信,咱们能够打一个简单的比方:
设想咱们本身就是浏览器,服务器就是10086语音服务台,咱们如今想要和10086服务台取得联系(好比说想骚扰接线员MM),咱们该怎么办呢?
固然,大多数人都应该想到,那就是要有部电话。是这样的,这就引出了咱们的第一个概念:套接字(Socket)。
套接字在百度百科上的解释是:
多个TCP链接或多个应用程序进程可能须要经过同一个 TCP协议端口传输数据。为了区别不一样的应用程序进程和链接,许多计算机操做系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口。
这个解释太学术了,咱们能够简单把套接字理解成一个电话,咱们能够从中发送信息和获取信息。
好了,电话有了,咱们该给10086服务台打电话了。等等,咱们是否是忘了一点,给10086打电话是否是要保证10086服务台也要有一部电话来等待咱们的来电呢?对的,那么就是说服务器端也要有一个套接字,专门接受浏览器的请求。通常当一个服务器启动服务后就会开启一个监听链接的套接字,专门等待浏览器链接,接受浏览器请求。
接下来咱们要开始打电话了。大多数人都应该有给10086服务台打电话的经验吧,接通后并非立刻由接线员MM来接听你的电话的,而是根据语音提示选择你想要的服务。当你选择了语音服务之后,系统才会自动给你安排一个接线员MM来 接听你的电话。那么这个过程是否是又生成了一个套接字呢?是的,没错,咱们能够把呼叫系统(也就是给你语音提示,让你选择服务的系统)当成专门接受浏览器 的请求的那个套接字,当浏览器发送了一个请求后系统自动生成一个专门和你的浏览器通讯的套接字,这样咱们就能够和接线员MM通话了,浏览器也就能够和服务器通讯了。
固然这远远不是B/S结构的所有,咱们还须要进一步深化:
首先咱们想一想,咱们要和接线员通话是否是要约定一个你们都能听得懂的语言,不然我说中文他说英语,这样就谁也听不懂谁的话,也不会完成通话,那么这个约定的语言是什么呢?那就是HTTP协议。
仍是先来看百度百科上的解释:
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为普遍的一种网络协议。全部的WWW文件都必须遵照这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
咱们就能够把它理解成一种浏览器和服务器都遵循的一种语法规范,全部的信息都是经过这种语法规范传输的,这样浏览器和服务器均可以正确的理解。
浏览器和服务器通常并非直接链接上的,而是须要经过中间的网络设备,就像咱们的声音并非直接传到接线员的耳朵里,而是要经过电话线经过电波传送同样,浏览器和服务器所发送的遵循HTTP协议的信息也要经过网络设备的传递才能被对方所接收。而这就须要一种在网络设备(网线)上传输数据的一种通用的语法规范(协议)。这样的协议使用最多的有2种:TCP协议和UDP协议
TCP---传输控制协议,提供的是面向链接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间创建一个TCP链接,以后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另外一端。
UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,可是并不能保证它们能到达目的地。因为UDP在传输数据报前不用在客户和服务器之间创建一个链接,且没有超时重发等机制,故而传输速度很快。
无论使用哪一种方法,总之这样网络设备间也有了一套传输的协议,这样一来,浏览器和服务器才能真正的实现通讯。
下面让咱们来看看咱们浏览网页的时候发生了什么吧。
1.首先咱们在地址栏上输入咱们想要打开的网址,而后咱们一般会按下回车。这样一个请求就由浏览器以一种知足http协议的请求报文的形式发往服务器,请求报文中包含了要请求的页面地址,请求的文件类型等一系列信息。
2.在请求报文传递至客户端得网络设备的时候,网络设备把请求报文包装在一个知足TCP协议的数据中,经过网线传向服务器的网络设备。
3.服务器的网络设备接收到数据后,使用特殊的算法将数据解译,从新恢复成浏览器发出知足http协议的请求报文的形式,而后传向服务器软件。
4.服务软件获得请求报文后,根据请求报文所请求的页面地址在服务器的数据库中找到相应的页面,而后生成知足http协议的响应报文发向浏览器。响应报文中包括了响应报文头和被请求页面的代码(响应报文体)。
5.一样的,响应报文经过服务器的网络设备,被包装在一个知足TCP协议的数据,经过网线传向客户端的网络设备。
6.客户端的网络设备将响应报文解析,而后传给浏览器软件,浏览器在将响应报文解析,这样咱们就在浏览器上看到了想要看到的网页。
以上只是浏览器与服务器之间通讯的最简单的形式,实际使用中,一个网页每每包含着html代码,js代码,css样式表,图片等等多种数据,而这些数据并非一次性由服务器传给浏览器的,而是存在着必定的顺序。首先服务器收到浏览器的请求后会将html代码发给浏览器,浏览器收到响应后会解析响应报文,发现html代码中包含着js代码和css样式表,而浏览器端并无这些数据,因此浏览器会再次发送请求,向服务器请求js代码或css样式表数据(注意一次只能请求一种类型的数据),服务器收到请求后,会根据浏览器的请求再次找到数据库中的js文件或css样式表,将其发送到浏览器端。当网页中包含图片的时候也是同理。就这样循环往复,通过屡次浏览器的请求和服务器的响应,当浏览器发现本身已经有了全部须要的数据后,会中止发送请求,这样一个完整的网页就呈如今咱们眼前了。
以上只是浏览器与服务器之间通讯的大体过程,要想详细了解其中门道还请各位参考更详细的文章。
原网址:http://blog.chinaunix.net/uid-26602509-id-3273127.html