Skip to content

地址栏输入 URL 敲下回车后发生了什么?

  • URL解析
  • DNS 查询
  • TCP 连接
  • HTTP 请求
  • 响应请求
  • 页面渲染

URL解析

首先判断你输入的是一个合法的URL 还是一个搜索的关键词,然后对内容进行解析

http

  • 协议:http 还是 https
  • 域名:
  • 端口号:默认是80,可以省略
  • 路径:默认是 /,可以省略
  • query:查询参数
  • hash:锚点

DNS查询

DNS解析是将域名解析成IP地址,DNS解析的过程是一个递归查询的过程,从根域名服务器开始,依次查询,直到找到对应的IP地址

DNS缓存

  • 浏览器缓存
  • 系统缓存
  • 路由器缓存
  • ISP DNS 缓存
  • 根域名服务器

DNS污染

DNS污染是指在DNS服务器上篡改DNS记录,使得用户访问的域名被解析到错误的IP地址上,从而无法访问到正确的网站

TCP连接

得到IP地址,浏览器会向这个IP地址放松一个TCP连接,这个过程叫做TCP三次握手。

  1. 客户端发送一个SYN包给服务器,告诉服务器我要建立连接了,你准备好接受了吗?
  2. 服务器收到SYN包后,回复一个SYN+ACK包,告诉客户端我准备好了,你可以发数据了
  3. 客户端收到SYN+ACK包后,再回复一个ACK包,告诉服务器我也准备好了,你可以发数据了

这样一个TCP连接就建立起来了,客户端和服务器就可以开始传输数据了。目的是为了在不可靠的网络环境中,保证数据的可靠传输。

TCP三次握手

HTTP请求

这个请求包括一个请求行(方法、路径、协议版本)、多个请求头(如 Host、Uer-Agent 等)和请求体(如 Post 请求)。

响应请求

响应包括一个响应行(协议版本、状态码、状态描述)、多个响应头(如 Content-Type、Content-Length 等)和响应体(如 HTML、图片等)。

页面渲染

浏览器首先会解析 HTML,创建 DOM 树。同时,它也会解析 CSS,创建 CSSOM 树。然后,它会将 DOM 树和 CSSOM 树合并成一个渲染树。在这个过程中,如果遇到 JavaScript,浏览器会停下来,执行 JavaScript,可能会修改 DOM 树和 CSSOM 树,然后继续渲染过程。最后,浏览器会根据渲染树来绘制页面。

四次挥手

当页面渲染完成后,浏览器会关闭 TCP 连接。这个过程通常被称为 "四次挥手":

  1. 客户端发送一个 FIN 包(结束)到服务器,请求关闭连接。
  2. 服务器接收到 FIN 包后,返回一个 ACK 包(确认)。这表示服务器已经准备好关闭连接了。
  3. 然后,服务器发送一个自己的 FIN 包到客户端。
  4. 最后,客户端返回一个 ACK 包,确认已经接收到服务器的 FIN 包。

这样,TCP 连接就被关闭了。这个过程的目的是为了确保双方都已经完成了数据传输,可以安全地关闭连接。