在浏览器中输入www.baidu.com后执行的流程(转)

输入地址
        当咱们开始在浏览器中输入网址www.baidu.com的时候,浏览器其实就已经在智能的匹配可能的url 了,他会从历史记录,书签等地方,找到已经输入的字符串可能对应的 url,而后给出智能提示,让你能够补全url地址。对于 google的chrome 的浏览器,他甚至会直接从缓存中把网页展现出来,就是说,你尚未按下 enter,页面就出来了。html

 

浏览器查找域名的 IP 地址
        一、请求一旦发起,浏览器首先要作的事情就是解析这个域名,通常来讲,浏览器会首先查看本地硬盘的 hosts 文件,看看其中有没有和这个域名对应的规则,若是有的话就直接使用 hosts 文件里面的 ip 地址。chrome

        二、若是在本地的 hosts 文件没有可以找到对应的 ip 地址,浏览器会发出一个 DNS请求到本地DNS服务器(若是是首次,因为没有DNS服务器的MAC地址,因此只须要将数据发送给网关路由器192.168.1.1(经过ARP获取其MAC地址),他会想办法发给DNS服务器)。本地DNS服务器通常都是你的网络接入服务器商提供,好比中国电信,中国移动。后端

        三、查询你输入的网址的DNS请求到达本地DNS服务器以后,本地DNS服务器会首先查询它的缓存记录,若是缓存中有此条记录,就能够直接返回结果,此过程是递归的方式进行查询。若是没有,本地DNS服务器还要向DNS根域名服务器进行查询。浏览器

        四、根域名DNS服务器没有记录具体的域名和IP地址的对应关系,而是告诉本地DNS服务器,你能够到顶级域服务器上去继续查询,并给出顶级域服务器的地址。这种过程是迭代的过程。缓存

        五、本地DNS服务器继续向其余域名服务器发出请求,在这个例子中,请求的对象是.com域名服务器。.com域名服务器收到请求以后,也不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器,你的域名的解析服务器的地址。安全

        六、最后,本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名和IP地址220.181.27.48对应关系,本地DNS服务器不只要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,能够直接返回结果,加快网络访问。服务器

网络部分
一、应用层DNS解析域名发起HTTP请求报文(域名 to IP)
        经过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话(HTTP请求包)到220.181.27.48。而后经过传输层(TCP进行封装数据包,输入到网络层)。cookie

        其中:http请求包括网络

        请求行:GET/POST…,目标URL,HTTP 版本布局

        请求头:客户端的Cookie和User-Agent就放在这里

        请求体:好比客户端POST的数据就放在这里(对比:GET的数据放在请求行的URL里).

  二、传输层TCP分割成报文段并加端口
        在传输层(TCP 协议)把从应用层处收到的数据(HTTP 请求报文)进行分割(报文段),并在各个报文上打上标记序号及端口号后转发给网络层。

        TCP协议为传输报文提供可靠的字节流服务。它为了方便传输,将大块的数据分割成以报文段为单位的数据包进行管理,并为它们编号,方便服务器接收时能准确地还原报文信息。把HTTP会话请求分红报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。而后使用网络层的IP地址查找目的端。TCP协议经过“三次握手”等方法保证传输的安全可靠。

  三、网络层查找MAC地址(路由器)(IP、ICMP、ARP、RARP)(IP to MAC)
        IP协议的做用是把TCP分割好的各类数据包加上IP首部后传送给接收方。而要保证确实能传到接收方还须要接收方的MAC地址,也就是物理地址。IP地址和MAC地址是一一对应的关系。ARP协议能够将IP地址解析成对应的MAC地址。当通讯的双方不在同一个局域网时,须要屡次中转才能到达最终的目标,在中转的过程当中须要经过下一个中转站(交换机)的MAC地址来搜索下一个中转目标。

 

  四、网络接口层
        在找到对方的MAC地址后,就将数据发送到数据链路层传输,由数据链路层的网桥、交换机根据mac地址进行端口转发,再由物理层的中继器、集线器进行信号传输放大等。这时,客户端发送请求的阶段结束

 

  五、服务器接收数据
        接收端的服务器在链路层接收到数据包,再层层向上直到应用层。这过程当中包括在传输层经过TCP协议将分段的数据包从新组成原来的HTTP请求报文。

 

  六、服务器响应请求,返回HTTP响应
        服务接收到客户端发送的HTTP请求后,查找客户端请求的资源,并返回响应报文,响应报文中包括一个重要的信息——状态码。状态码由三位数字组成,其中比较常见的是200 OK表示请求成功。301表示永久重定向,即请求的资源已经永久转移到新的位置。在返回301状态码的同时,响应报文也会附带重定向的url,客户端接收到后将http请求的url作相应的改变再从新发送。404 not found 表示客户端请求的资源找不到。

        其中:HTTP响应以下

        响应行:HTTP版本,状态码,状态码描述

        响应头:set-cookies,server信息

        响应体:cookie,html,image,后端返回的请求数据等等

 

  七、服务器返回相应文件
        请求成功后,服务器会返回相应的HTML文件。接下来就到了页面的渲染阶段了。

 

4、浏览器方面:页面渲染,显示HTML
        现代浏览器渲染页面的过程是这样的:

                解析HTML以构建DOM树 –> 构建渲染树 –> 布局渲染树 –> 绘制渲染树。

 

        DOM树是由HTML文件中的标签排列组成,渲染树是在DOM树中加入CSS或HTML中的style样式而造成。渲染树只包含须要显示在页面中的DOM元素,像<head>元素或display属性值为none的元素都不在渲染树中。

 

        在浏览器还没接收到完整的HTML文件时,它就开始渲染页面了,在遇到外部链入的脚本标签或样式标签或图片js时,html文档会挂起渲染(加载解析渲染同步)的线程,不只要等待文档中js文件加载完毕,还要等待解析执行完毕,才能够恢复html文档的渲染线程。会再次发送HTTP请求重复上述的步骤(有时候服务器会把可能客户端还须要的数据一块儿继续发送过来,客户端能够不用再次发送HTTP请求)。在收到CSS文件后会对已经渲染的页面从新渲染,加入它们应有的样式,图片文件加载完马上显示在相应位置。在这一过程当中可能会触发页面的重绘或重排。原文:https://blog.csdn.net/qq_35642036/article/details/82788884 

相关文章
相关标签/搜索