这个问题算是一个比较常见的面试问题,自己在技术群里看到这个问题之后简单的了解了一下,但回过头来看看这个问题,发现当时真是简单的了解了一下,啥都没记得,所以又重新捡起来说道说道。
在浏览器中输入一个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)的解释。涉及到了这个过程中的一些计算机硬件的知识以及网络的分层协议。