浏览器输入url按下回车后发生了什么

前端经典面试题之一(浏览器输入url按下回车后发生了什么)前端

输入地址。
DNS解析。
TCP链接。
发送http请求。
返回http响应。
浏览器解析渲染页面。
断开链接。web

1、输入地址:面试

当咱们在浏览器输入地址的时候,浏览器已经在只能匹配到可能获得的url了,他会从历史记录,书签等地方,找到已经输入的字符串可能对应的 url,而后给出智能提示,让你能够补全url地址。浏览器

2、DNS解析:缓存

DNS解析的过程就是寻找哪台机器上有你须要资源的过程。当你在浏览器中输入一个地址时,例如http://www.baidu.com,其实不是百度网站真正意义上的地址。互联网上每一台计算机的惟一标识是它的IP地址,可是IP地址并不方便记忆。用户更喜欢用方便记忆的网址去寻找互联网上的其它计算机,也就是上面提到的百度的网址。因此互联网设计者须要在用户的方便性与可用性方面作一个权衡,这个权衡就是一个网址到IP地址的转换,这个过程就是DNS解析。服务器

解析过程:网络

查找浏览器缓存:由于浏览器通常会缓存DNS记录一段时间,不一样浏览器的时间可能不同,通常2-30分钟不等,浏览器去查找这些缓存,若是有缓存,直接返回IP,不然下一步。
查找系统缓存:浏览器缓存中找不到IP以后,浏览器会查看本地硬盘的 hosts 文件,看看其中有没有和这个域名对应的规则,若是有的话就直接使用 hosts 文件里面的 ip 地址。
若是在本地的 hosts 文件没有可以找到对应的 ip 地址,浏览器会发出一个 DNS请求到本地DNS服务器 。
查询你输入的网址的DNS请求到达本地DNS服务器以后,本地DNS服务器会首先查询它的缓存记录,若是缓存中有此条记录,就能够直接返回结果,此过程是递归的方式进行查询。若是没有,本地DNS服务器还要向DNS根服务器进行查询。
根DNS服务器没有记录具体的域名和IP地址的对应关系,而是告诉本地DNS服务器,你能够到域服务器上去继续查询,并给出域服务器的地址。这种过程是迭代的过程。
本地DNS服务器继续向域服务器发出请求,在这个例子中,请求的对象是.com域服务器。.com域服务器收到请求以后,也不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器,你的域名的解析服务器的地址。
最后,本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不只要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,能够直接返回结果,加快网络访问。
DNS查询的两种方式:svg

一、递归解析:布局

当局部DNS服务器本身不能回答客户机的DNS查询时,它就须要向其余DNS服务器进行查询。此时有两种方式,如图所示的是递归方式。局部DNS服务器本身负责向其余DNS服务器进行查询,通常是先向该域名的根域服务器查询,再由根域名服务器一级级向下查询。最后获得的查询结果返回给局部DNS服务器,再由局部DNS服务器返回给客户端。性能

二、迭代解析:

当局部DNS服务器本身不能回答客户机的DNS查询时,也能够经过迭代查询的方式进行解析,如图所示。局部DNS服务器不是本身向其余DNS服务器进行查询,而是把能解析该域名的其余DNS服务器的IP地址返回给客户端DNS程序,客户端DNS程序再继续向这些DNS服务器进行查询,直到获得查询结果为止。也就是说,迭代解析只是帮你找到相关的服务器而已,而不会帮你去查。

3、TCP链接:

主机浏览器经过DNS解析获得了目标服务器的IP地址后,与服务器创建TCP链接。

TCP三次握手:

第一次握手:客户端将标志位SYN置为1,随机产生一个值为seq=J(J的取值范围为=1234567)的数据包到服务器,客户端进入SYN_SENT状态,等待服务端确认;

第二次握手:服务端收到数据包后由标志位SYN=1知道客户端请求创建链接,服务端将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给客户端以确认链接请求,服务端进入SYN_RCVD状态。

第三次握手:客户端收到确认后,检查ack是否为J+1,ACK是否为1,若是正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务端,服务端检查ack是否为K+1,ACK是否为1,若是正确则链接创建成功,完成三次握手,随后客户端A与服务端B之间能够开始传输数据了。

为何须要三次握手:

三次握手的目的是“为了防止已失效的链接请求报文段忽然又传送到了服务端,于是产生错误。

4、发送http请求:

创建了TCP链接以后,发起一个http请求。一个典型的 http request header 通常须要包括请求的方法,例如 GET 或者 POST 等,不经常使用的还有 PUT 和 DELETE 、HEAD、OPTION以及 TRACE 方法。

5、返回http响应:

服务器接受并处理完请求,返回 HTTP 响应,一个响应报文格式基本等同于请求报文,由响应行、响应头、空行、实体组成。

6、浏览器解析渲染页面:

浏览器是一个边解析边渲染的过程。首先浏览器解析HTML文件构建DOM树,而后解析CSS文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。这个过程比较复杂,涉及到两个概念: reflow(回流)和repain(重绘)。DOM节点中的各个元素都是以盒模型的形式存在,这些都须要浏览器去计算其位置和大小等,这个过程称为relow;当盒模型的位置,大小以及其余属性,如颜色,字体,等肯定下来以后,浏览器便开始绘制内容,这个过程称为repain。页面在首次加载时必然会经历reflow和repain。reflow和repain过程是很是消耗性能的,尤为是在移动设备上,它会破坏用户体验,有时会形成页面卡顿。因此咱们应该尽量少的减小reflow和repain。

浏览器两种渲染方式:

webkit的主要流程:

Geoko的主要流程:

详细介绍请参考:

浏览器渲染原理及流程 - 李某龙 - 博客园

www.cnblogs.com
图标
7、断开链接:

TCP四次挥手:

第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。


分享
推荐阅读
从输入 URL 到页面展现到底发生了什么?看完吊打面试官!
一、输入地址二、浏览器查找域名的 IP 地址三、浏览器向 web 服务器发送一个 HTTP 请求四、服务器的永久重定向响应六、服务器处理请求七、服务器返回一个 HTTP 响应八、浏览器显示 HTML九、浏览器发…

面试环节:在浏览器输入 URL 回车以后发生了什么?(超详细版) 前言大体流程1、URL 解析2、DNS 查询3、TCP 链接1. 应用层:发送 HTTP 请求2. 传输层:TCP 传输报文3. 网络层:IP协议查询Mac地址4. 链路层:以太网协议4、服务器处理请求5、浏览器接…