HTML面试题四:从输入URL到浏览器展示页面,这过程发生了什么?

本文详细阐述了从用户输入URL到浏览器展示页面的整个过程,包括URL解析、DNS域名解析、TCP三次握手建立连接、HTTP请求与响应、浏览器解析渲染页面的各个步骤,以及四次挥手断开连接的细节。重点讨论了HTTP请求方法GET和POST的区别,DOM和CSSOM树的构建,以及渲染树的布局和绘制。
摘要由CSDN通过智能技术生成

一、URL的输入(域名找不到,需要转化)

在这里插入图片描述

 URL:  scheme://host.domain:port/path/filename
 //    协议名   主机名 域名  端口号  文档路径
  • scheme - 定义因特网协议名。常见的协议有 http、https、ftp、file,其中最常见的类型是 http,而 https则是进行加密的网络传输。

  • host - 定义域主机名(http 的默认主机是 www)

  • domain - 定义因特网域名,比如 w3school.com.cn

  • port - 定义主机上的端口号(http 的默认端口号是 80)

  • path/filename - 定义服务器上的文档的路径(如果省略,则文档必须位于网站的根目录中)。

域名包括以上几个部分,输入URL后,浏览器不能直接通过域名找到对应的服务器,而是要通过 IP 地址找到对应的服务器,下一步要进行域名解析

二、URL域名解析(获取真的IP地址,可以访问了)

简称DNS: domain name resolution

  • 浏览器缓存:浏览器会按照一定的频率缓存 DNS 记录

  • 操作系统缓存:如果浏览器缓存中找不到需要的 DNS 记录,那就去操作系统中找。

  • 路由缓存:路由器也有 DNS 缓存。

  • DNS 服务器:ISP 是互联网服务提供商(Internet Service Provider)的简称,ISP 有专门的
    DNS 服务器应对 DNS 查询请求。

  • 根服务器:ISP 的 DNS 服务器还找不到的话,它就会向根服务器发出请求,进行递归DNS查询(DNS 服务器先问根域名服务器.com域名服务器的 IP 地址,然后再问.baidu 域名服务器,依次类推)

    浏览器通过DNS获取到web服务器真的IP地址后,便向服务器发起TCP连接请求,通过TCP三次握手建立好连接后,浏览器便可以将HTTP请求数据通过发送给服务器了

三、TCP 三次握手(为发送请求做准备)

  • 客户端发送一个带 SYN=1,Seq=X 的数据包到服务器端口(第一次握手,由浏览器发起,告诉服务器我要发送请求了)

  • 服务器发回一个带 SYN=1, ACK=X+1, Seq=Y 的响应包以示传达确认信息**(第二次握手,由服务器发起,告诉浏览器我准备接受了,你赶紧发送吧)**

  • 客户端再回传一个带 ACK=Y+1, Seq=Z 的数据包,代表“握手结束”(第三次握手,由浏览器发送,告诉服务器,我马上就发了,准备接受吧)

    三次握手的作用:防止已失效的连接请求报文段又突然抽风儿传送到了服务端,因而产生错误”。
    在这里插入图片描述

四、开始发送 HTTP 请求报文

  • 请求行(request line):标明请求方法(Get,Post)、URL、协议版本(HTTP/1.1)
    • GET和POST之间的区别:
      参数位置:GET方法的数据参数是暴露在起始行的URL中的,而POST方法的数据参数是在报文主体中的。分
      安全性:GET方法相对来说没有POST安全,因为它的数据参数可以直接从URL中获取,但是GET的效率更高。
      大小限制:GET方法的数据参数大小有一定的限制(1024)(原因也是因为它的数据参数是放在URL中的),而POST对数据大小是没有限制的。
  • 请求头(header):请求头包含请求的附加信息,每一对关键字和值用英文冒号“:”分隔。
  • 请求体(request body):请求参数被放在请求体中
    在这里插入图片描述

五、服务器处理请求并返回 HTTP 响应报文

响应报文包括三部分

  • 响应行(response line):包括协议版本(HTTP/1.1),状态码,状态码描述(200 OK)
    • Status状态码规则如下:
      1开头信息状态码100–Continue 初始的请求已经接受,客户应当继续发送请求的其余部分
      2开头成功状态码200–表示请求已被成功接收、理解、接受。
      3开头重定向状态码302–要完成请求必须进行更进一步的操作。
      4开头客户端错误状态码404–请求有语法错误或请求无法实现。
      5开头服务器端错误状态码500–服务器未能实现合法的请求。
  • 响应头(header):响应头包含请求的附加信息,每一对关键字和值用英文冒号“:”分隔。
  • 响应体(response body):可以承载很多类型的数字数据:图片、视频、HTML 文档、软件应用程 序、信用卡事务、电子邮件等
    在这里插入图片描述

六、浏览器解析渲染页面

在这里插入图片描述

1. 根据 HTML 解析出 DOM 树(渲染引擎线程执行)

  • DOM解析和JS解析单方向互斥,JS解析时会阻塞Dom解析,但是Dom解析

2. 根据 CSS 解析出 CSS 规则树(开启异步线程执行)

  • CSS解析和DOM树是并行的,因为遇到CSS元素时,是开启异步线程下载和构建CSS规则树
  • CSS解析和JS解析双方向互斥,JS解析时会阻塞CSS解析,而CSS解析时也会阻塞JS解析
  • CSS解析不会阻塞DOM的解析,CSS解析会阻塞DOM的渲染

3. 结合 DOM 树和 CSS 规则树,生成渲染树

  • DOM 树和 CSS 规则树全部准备好了以后,浏览器才会开始构建渲染树。
  • DOM树和渲染树的区别: 渲染树中并不包含DOM树中隐藏的元素,隐藏元素不需要显示

4. 渲染树布局(layout):根据渲染树计算出每个渲染树节点在屏幕中的位置

  • 回流(reflow):当渲染树的一部分或全部元素结构发生改变(增加、删除、位置改变,显示或隐藏),浏览器都需要重新计算一遍DOM结构,重新对当前的页面进行渲染,这就是回流。每个页面至少需要一次回流,就是在页面第一次加载的时候

5. 渲染树绘制(painting):最后遍历渲染树并用UI后端组件将每一个节点绘制出来

  • 重绘(repaint)元素外观的改变所触发的浏览器行为,这时浏览器只会重绘某一部分,重绘并不一定伴随重排。
  • 重排(reflow)元素的几何属性的改变,浏览器需要重新计算元素的几何属性,同样其他元素的几何属性和位置也会因此受到影响。浏览器会使渲染树中受到影响的部分失效,并重新构造渲染树。这个过程称为重排。重排一定伴随着重绘。

(附加):DOM树的解析和CSSOM树的解析是串行还是并行

  • CSS解析和DOM树是并行的,因为遇到CSS元素时,是开启异步线程下载和构建CSS规则树

七、四次挥手断开连接

在这里插入图片描述

  • 发起方向被动方发送报文,Fin、Ack、Seq,表示已经没有数据传输了。并进入 FIN_WAIT_1
    状态。(第一次挥手:由浏览器发起的,发送给服务器,我请求报文发送完了,你准备关闭吧)
  • 被动方发送报文,Ack、Seq,表示同意关闭请求。此时主机发起方进入 FIN_WAIT_2
    状态。(第二次挥手:由服务器发起的,告诉浏览器,我请求报文接受完了,我准备关闭了,你也准备吧)
  • 被动方向发起方发送报文段,Fin、Ack、Seq,请求关闭连接。并进入 LAST_ACK
    状态。(第三次挥手:由服务器发起,告诉浏览器,我响应报文发送完了,你准备关闭吧)
  • 发起方向被动方发送报文段,Ack、Seq。然后进入等待 TIME_WAIT
    状态。被动方收到发起方的报文段以后关闭连接。发起方等待一定时间未收到回复,则正常关闭。(第四次挥手:由浏览器发起,告诉服务器,我响应报文接受完了,我准备关闭了,你也准备吧)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值