从输入URL到页面加载完成发生了什么

一道非常经典的面试题: 从输入 URL 到页面加载完成发生了什么? 在浏览器地址栏键入 URL,按下回车之后会经历以下流程。

目录
  1. 面试题
  2. DNS 域名解析
  3. 建立 TCP 连接
  4. 发送 HTTP 请求
  5. 服务器处理请求
  6. 服务器返回结果
  7. 浏览器解析渲染页面
  8. 关闭 TCP 连接
  9. 个人观点

从输入 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)。