重新认识输入url到页面渲染的过程

164 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第12天,点击查看活动详情

前言

虽然这是老生常谈的知识点,但是这篇文章是我个人的理解,也算对这个知识点的巩固吧,是可能有些方面不到位,望见谅哈~~

大纲

  • DNS解析
  • TCP连接
  • 发送HTTP请求
  • 服务端接收请求并返回数据
  • 浏览器渲染页面
  • 关闭TCP连接

DNS解析

假设我们输入的是 www.hao123.com,然而这个网站不是真实的 IP 地址,它只是一个 域名,需要解析成二进制,解析的过程可以参考下图。

image-20220412221521534.png

输入 m.xyz.com -> 本地域名服务器 -> 根域名服务器 -> 顶级域名服务器 -> 权限域名服务器 ,一层一层往上找,如果找不到则返回 无法访问此网站 找到之后则进行下一步。

TCP连接

TCP是一种面向可靠的传输,过程有 三次握手,四次挥手。

三次握手

第一次握手:

客户端发送syn包到服务器,等待服务器确认(客户端向服务端请求建立连接)。

第二次握手:

服务器收到syn包,必须确认客户的SYN,同时自己也发送一个SYN,即SYN+ACK包,此时服务器进入SYN_RECV状态(服务端答应请求并向客户端发包)。

第三次握手:

客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手(客户端收到确认后,通知服务端,我已收到,可以开始传输数据啦)。

QQ图片20220412232646.jpg

为什么要三次握手,两次行不行?

如果只有一次握手,Client不能确定与Server的单向连接,更加不能确定Server与Client的单向连接; 如果只有两次握手,Client确定与Server的单向连接,但是Server不能确定与Client的单向连接; 只有三次握手,Client与Server才能相互确认双向连接,实现双工数据传输。

发送HTTP请求

HTTP Request 对象,分别由 请求头、请求报文、响应报文组成。

发送的是HTTP还是HTTPS 呢?

若是HTTPS(HTTP + SSL) 则会做加密处理。

服务端接收请求并返回数据

对TCP连接进行处理,按照格式封装成 HTTP Response 对象,返回三个东西:

  • 状态码
  • 响应抱头
  • 响应报文

浏览器渲染页面

  • 浏览器发送请求下载了所有的 HTML 资源,然后解析 HTML, 生成 DOM 树,解析 CSS,生成 CSSOM 树。
  • DOM 树和 CSSOM 树结合,生成 渲染树(Render Tree)
  • 根据生成的渲染树,进行 回流(Layout) ,得到节点的几何信息(位置,大小)。
  • 根据 渲染树 以及 回流 得到的几何信息,重绘(Painting) 得到节点的绝对像素。
  • 将像素发送给GPU,展示(Dsiplay) 在页面上 。

QQ图片20220412232721.png

关闭TCP连接

四次挥手

第一次挥手:

客户端告诉服务端,我们要关闭连接了哟

客户端发送一个FIN,用来关闭客户端到服务器的数据传送。

第二次握手:

服务端告诉客户端,好的,我们可以断开了

服务器收到FIN包后,发送一个ACK给对方并且带上自己的序列号seq。

第三次握手:

服务端告诉客户端,我们的数据发送完毕咯,我们要分开了,5555

服务器发送一个FIN,用来关闭服务器到客户端的数据传送。

第四次握手:

客户端告诉服务端,好的,那我们可以关闭连接了

客户端收到FIN后,发送一个ACK给被服务端。

QQ图片20220412232703.jpg

总结

以上就是本次分享的全部内容~~

如果觉得文章写得不错,对你有所启发的,请不要吝啬 点个 关注 并在 评论区 留下你宝贵的意见哦~~😃