从输入 URL 到页面加载完成发生了什么
面试题#
一道非常经典的面试题:从输入 URL 到页面加载完成发生了什么?
在浏览器地址栏键入 URL,按下回车之后会经历以下流程。
DNS 域名解析#
浏览器先去本地的缓存文件中查找,检查 URL 中的域名对应 ip 的关系,如果找到了的话,则向对应的 ip 地址发起请求。
本地缓存查找顺序:浏览器缓存 -> 系统缓存 -> 路由器缓存
如果本地没有找到,则向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址。
DNS 服务器查询顺序:本地域名服务器 -> 根域名服务器 -> 顶级域名服务器 -> 主域名服务器
建立 TCP 连接#
拿到 IP 地址后,客户端开始向服务器发起请求,经过三次握手后,建立 TCP 连接;
请查看本博客 TCP 协议的三次握手和四次挥手文章。
发送 HTTP 请求#
与服务器建立连接后,就可以向服务器发送请求了。请求内容是一段报文,由请求行、请求头、空行和请求体组成。
请查看本博客 HTTP 协议知识文章。
服务器处理请求#
服务器收到请求后由 Web 服务器(Apache,Nginx)处理请求,Web 服务器解析用户请求,知道了需要调用那些资源文件,
再通过相应的这些资源文件处理用户请求和参数,并调用数据库等,然后将结果通过 Web 服务器返回给浏览器
服务器返回结果#
服务器把响应结果返回给客户端,响应内容也是一段报文,有响应行、响应头、空行和响应体组成。
请查看本博客 HTTP 协议知识文章。
浏览器解析渲染页面#
浏览器获得并解析服务器的返回内容,然后加载 HTML 文件及文件内包含的外部引用及图片,多媒体等资源,
同时对它们进行渲染,然后展现在屏幕上。
请查看浏览器渲染机制和优化文章。
关闭 TCP 连接#
为了避免服务器与客户端双方资源的占有和消耗,当双方没有请求或者响应传递后,任意一方都可以发起关闭请求,
与连接时三次握手类似,需要经过四次挥手,TCP 连接关闭。
请查看本博客 TCP 协议的三次握手和四次挥手文章。
个人观点#
这道题考察的非常全面,貌似不管是前端还是后端面试的时候都有可能被问到,但是侧重点应该不一样。
作为一个前端工程的师,个人认为浏览器渲染页面应该是重点考察的内容,其他的内容只要了解一下即可。而后端工程师考察的话,考察的重点应该是服务器如何处理 HTTP 请求并返回响应结果的。以及 TCP/IP 协议,HTTP 协议等网络连接相关的知识。
如果是全栈或者高级工程师的话,可能是整个过程应该都要非常清楚了解,而且不局限于上面几点,也不局限于软件方面的知识。应该还需要知道硬件设备方面的知识,如怎么通过键盘输入内容,显示器是如何显示内容的,数据是怎么传输的等等(个人 YY)。