浏览器从输入网址到页面展示的过程

152 阅读2分钟

浏览器从输入网址到页面展示的过程

浏览器从输入网址到页面渲染分以下几个过程:

  1. URL输入
  2. DNS解析
  3. 建立TCP连接
  4. 发送HTTP/HTTPS请求
  5. 服务器响应请求
  6. 浏览器解析渲染页面
  7. HTTP 请求结束,断开 TCP 连接

DNS解析

因为浏览器不能直接通过域名找到对应的服务器 IP 地址,所以需要进行 DNS 解析,查找到对应的 IP 地址进行访问。

  1. 在浏览器中输入 hzfe.org 域名,操作系统检查浏览器缓存和本地的 hosts 文件中,是否有这个网址记录,有则从记录里面找到对应的 IP 地址,完成域名解析
  2. 查找本地 DNS 解析器缓存中,是否有这个网址记录,有则从记录里面找到对应的 IP 地址,完成域名解析。
  3. 使用 TCP/IP 参数中设置的 DNS 服务器进行查询。如果要查询的域名包含在本地配置区域资源中,则返回解析结果,完成域名解析。
  4. 检查本地 DNS 服务器是否缓存该网址记录,有则返回解析结果,完成域名解析。
  5. 本地 DNS 服务器发送查询报文至根 DNS 服务器,根 DNS 服务器收到请求后,用顶级域 DNS 服务器地址进行响应。
  6. 本地 DNS 服务器发送查询报文至顶级域 DNS 服务器。顶级域 DNS 服务器收到请求后,用权威 DNS 服务器地址进行响应。
  7. 本地 DNS 服务器发送查询报文至权威 DNS 服务器,权威 DNS 服务器收到请求后,用 hzfe.org 的 IP 地址进行响应,完成域名解析。

查询通常遵循以上流程,从请求主机到本地 DNS 服务器的查询是递归查询,DNS 服务器获取到所需映射的查询过程是迭代查询。

TCP 三次握手和四次挥手

建立 TCP 连接时 server 与 client 会经历三次握手

  1. 浏览器服务器发送 TCP 数据:SYN(seq=x)

  2. 服务器浏览器发送 TCP 数据:ACK(seq=x+1) SYN(y)

  3. 浏览器服务器发送 TCP 数据:ACK(seq=y+1)

关闭 TCP 连接时 server 与 client 会经历四次挥手

  1. 浏览器服务器发送 TCP 数据:FIN(seq=x)

  2. 服务器浏览器发送 TCP 数据:ACK(seq=x+1)

  3. 服务器浏览器发送 TCP 数据:FIN(seq=y)

  4. 浏览器服务器发送 TCP 数据:ACK(seq=y+1)

为什么 2、3 步骤不合并起来呢?看起来是脱裤子放屁。

答:2、3 中间服务器很可能还有数据要发送,不能提前发送 FIN。