在浏览器中输入一个网址后,发生了什么?

这是面试中一道很是经典的问题。web

当你在浏览器中输入一个网址,浏览器的处理过程以下:面试

第一步 浏览器查找该域名的 IP 地址

第二步 浏览器根据解析获得的IP地址向 web 服务器发送一个 HTTP 请求

第三步 服务器收到请求并进行处理

第四步 服务器返回一个响应

第五步 浏览器对该响应进行解码,渲染显示。

第六步 页面显示完成后,浏览器发送异步请求。

下面对每一个环节作进一步分析:数据库

01 浏览器查找该域名的 IP 地址浏览器

浏览器缓存 首先是查找浏览器缓存,浏览器会缓存DNS记录一段时间,不一样浏览器保存的时常不等(2分钟到30分钟不等)。 缓存

系统缓存 若是在浏览器缓存里没有找到须要的记录,浏览器会作一个系统调用来查找这个网址的对应DNS信息。 服务器

路由器缓存 若是在系统缓存里没有找到找到对应的IP,请求会发向路由器,它通常会有本身的DNS缓存。 网络

ISP DNS服务器 若是在路由器缓存里仍是没有对应的IP,请求会被发送到ISP。 负载均衡

根域名服务器 若是仍是没有,请求将发向根域名服务器进行搜索。找不到就说明此域名不存在。异步

02 浏览器根据解析获得的IP地址向 web 服务器发送一个 HTTP 请求分布式

可能会重定向响应

       例如“http://facebook.com/”,服务器会给浏览器响应一个301永久重定向响应,这样浏览器就会访问“http://www.facebook.com/” 而非“http://facebook.com/”。

服务器重定向的缘由有不少,举其中两个: 

       一:跟搜索引擎排名有关。你看,若是一个页面有两个地址,就像“http://www.facebook.com/” 和“http://facebook.com/”。搜索引擎会认为它们是两个网站,结果形成每个的搜索连接都减小从而下降排名。 

       二:不一样的地址会形成缓存友好性变差。当一个页面有好几个名字时,它可能会在缓存里出现好几回。

而后浏览器会跟踪重定向地址 

       浏览器会发送另外一个获取请求到”http://www.facebook.com/”。

过程:

       经过DNS获取到IP后,目标IP和本机IP分别与子网掩码相与的结果相同,那么它们在一个子网,那么经过ARP协议能够查到目标主机的MAC地址,不然的话,须要经过网关转发,也就是目标MAC是网关的MAC。 

       请求须要进行编码,生成一个HTTP数据包,依次打上TCP、IP、以太网协议的头部。其中TCP头部主要信息是本机端口和目标端口号等信息,用于标识同一个主机的不一样进程,对于HTTP协议,服务器端的默认端口号是80,本机浏览器的话生成一个1024到65535之间的端口号。IP头部主要包含本地IP和目标IP等信息。以太网协议头部主要是双方的MAC地址,目标MAC能够由第一条所诉方法获得。以太网数据包的数据部分,最大长度为1500字节,因此若是IP包太大的话还要拆包,好比IP包5000字节,要分为4包,每一包都包含一个IP头部。

03 服务器收到请求并进行处理

负载均衡

       网站可能会有负载均衡设备来平均分配全部用户的请求。 

       负载均衡,即对工做任务进行平衡,分摊到多个操做单元上执行,如图片服务器,应用服务器。可分为链路负载均衡,集群负载均衡,操做系统负载均衡 

       集群负载均衡又分为硬件负载均衡和软件负载均衡。

CDN

       请求的数据可能存储在分布式缓存、静态文件或者数据库中。若是请求的数据是静态文件,若是在CDN上,那么CDN服务器又会处理这个用户的请求。若是在数据库中须要向数据库发起查询请求。

04 服务器返回一个响应

过程:

       服务器返回一个 HTTP 响应,若是返回状态码304,浏览器能够直接使用以前缓存的资源。对于内容响应,浏览器须要进行响应解码,渲染显示。

05 浏览器对该响应进行解码,渲染显示。

过程:

       在浏览器没有完整接受所有HTML文档时,它就已经开始显示这个页面了,若是是个静态的页面,拿到此就基本结束了。若是是是动态的,那么在浏览器显示HTML时,会获取嵌入在HTML中的对象,浏览器会发送获取请求来从新得到这些文件。这些请求都要经历一个和HTML读取相似的过程。 

       对于静态的页面内容,浏览器一般会进行缓存,而对于动态的内容,浏览器一般不会进行缓存。

06 页面显示完成后,浏览器发送异步请求。

过程:

       页面显示完成后客户端仍与服务器端保持着联系。 

它会持续与服务器保持联系来及时更新一些页面信息。在浏览器中执行的 JavaScript代码会给服务器发送异步请求。这个异步请求发送给特定的地址,它是一个按照程式构造的获取或发送请求。

相关扩展:

ARP原理

01 每一个主机都会在本身的ARP缓冲区中创建一个ARP列表,以表示IP地址和MAC地址之间的对应关系。 

02 当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,若是有,则直接发送数据,若是没有,就向本网段的全部主机发送ARP数据包,该数据包包括的内容有:源主机 IP地址,源主机MAC地址,目的主机的IP 地址。 

03 当本网络的全部主机收到该ARP数据包时,首先检查数据包中的IP地址是不是本身的IP地址,若是不是,则忽略该数据包,若是是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,若是已经存在,则覆盖,而后将本身的MAC地址写入ARP响应包中,告诉源主机本身是它想要找的MAC地址。 

04 源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。若是源主机一直没有收到ARP响应数据包,表示ARP查询失败。

RARP原理

       RARP是逆地址解析协议,做用是完成硬件地址到IP地址的映射,主要用于无盘工做站,由于给无盘工做站配置的IP地址不能保存。 

       工做流程:在网络中配置一台RARP服务器,里面保存着IP地址和MAC地址的映射关系,当无盘工做站启动后,就封装一个RARP数据包,里面有其MAC地址,而后广播到网络上去,当服务器收到请求包后,就查找对应的MAC地址的IP地址装入响应报文中发回给请求者。由于须要广播请求报文,所以RARP只能用于具备广播能力的网络。

相关文章
相关标签/搜索