在浏览器中输入一个url,敲击回车之后发生了啥

这个问题算是一个比较常见的面试问题,自己在技术群里看到这个问题之后简单的了解了一下,但回过头来看看这个问题,发现当时真是简单的了解了一下,啥都没记得,所以又重新捡起来说道说道。

在浏览器中输入一个url

浏览器会解析url中的信息,从而拿到域名字段。

浏览器根据url去访问DNS服务器查找IP

DNS的查找分为几步,这里只说一下步骤不解释原理:

  • 浏览器缓存:浏览器会缓存DNS记录,不过这个时间根据浏览器的不同大概会在(2min-30min)之间。
  • 操作系统缓存:如果浏览器缓存不包含所需的记录,则浏览器进行系统调用(Windows中的gethostbyname),查找操作系统本身的DNS缓存。
  • 路由器缓存:还找不到就会去查路由器缓存。
  • ISP DNS缓存:下一步就会去查ISP的DNS缓存。ISP(Internet Service Provider),互联网服务提供商。
  • 递归搜索:到达ISP这一步之后还找不到就会执行递归搜索,从根域名服务器查到顶级域名服务器,再到目标服务器,直到找到IP地址。
    走到这里基本已经拿到IP地址了,不过走了这么多过程,DNS查询肯定会有瓶颈,这里就不展开讨论了,有兴趣的可以自行baidu或google。

浏览器向目标服务器发送HTTP请求

GET请求命名包括:URL,浏览器自身的User-Agent header,并说明他接受那种类型的响应(Accept and Accept-Encoding headers),这个连接头会告知服务器要保持TCP连接(三次握手)以开放下一步请求,该请求会包含浏览器在这个域下的cookie信息。

请求和传输数据

服务器收到请求之后就会通过TCP协议给浏览器传回一个HTML的文件。服务器的返回会根据浏览器的一些参数而返回不同的结果,通常情况下会是200(正常返回)和301(永久重定向)。

浏览器开始渲染

浏览器在接收到html的返回之后(而不是全部接收完)就开始渲染html,当浏览器渲染开始之后就会根据页面上定义的一些标签去加载一些js,css,图片等静态资源。然后根据加载的资源去进行下一步的浏览器渲染工作。

[补充]浏览器渲染流程

浏览器渲染流程

图片引用:豹哥

这张图介绍的还是很不错的。
最后放上一个链接,是对这个问题很好很全(niu)面(bi)的解释。涉及到了这个过程中的一些计算机硬件的知识以及网络的分层协议。

你要是觉得好的话,可以点一下哦!