从输入URL到页面加载的过程?
- 首先浏览器通过DNS(域名解析服务)解析URL域名,获取对应的ip地址
- 浏览器拿到ip地址后,与服务器建立TCP链接
- 连接建立后,浏览器会向服务器发送一个 HTTP 请求
- 服务器收到请求后,根据请求的内容进行处理。它可能包括读取请求中的参数,执行相应的服务器端代码,访问数据库等。
- 服务器根据处理结果生成一个 HTTP 响应,包含有关响应的状态码(如 200 表示成功)和响应体(如 HTML 内容)等。将生成的响应返回给浏览器
- 浏览器收到响应后,开始对响应进行解析和渲染。它解析 HTML、CSS 和 JavaScript,并构建 DOM 树、CSSOM 树和 JavaScript 引擎来执行页面的交互逻辑。
- 浏览器根据解析到的 HTML 构建 DOM 树,并根据 CSS 样式对其进行样式计算和布局。
以上是一个大致的流程,实际上每个步骤都可能涉及更多的细节和优化。不同的浏览器和服务器也可能有不同的行为和策略来处理这些过程,以提供更好的性能和用户体验。
如何理解TCP链接? 三次握手四次挥手?
通过三次握手和四次挥手,TCP 协议可以确保建立和终止连接的可靠性和数据完整性。
三次握手(Three-Way Handshake):是客户端与服务端建立链接时,发送的三个数据包
- 第一次握手:客户端向服务器发送一个带有 SYN(同步)标志的连接请求报文段,表示客户端希望建立连接。
- 第二次握手:服务器收到请求后,回复一个带有 SYN/ACK(同步/确认)标志的报文段,表示服务器收到请求,并愿意建立连接。
- 第三次握手:客户端再次向服务器发送一个带有 ACK(确认)标志的报文段,表示客户端接收到服务器的确认,并完成连接的建立。
这个三次握手过程的目的是确保双方都能够通信,并同步双方的初始序列号。如果只有两次握手,可能会导致已失效的连接请求被错误地接受,从而产生连接混乱。
四次挥手(Four-Way Handshake):
- 第一次挥手:当客户端想要关闭连接时,发送一个带有 FIN(结束)标志的报文段,表示不再发送数据。
- 第二次挥手:服务器收到 FIN 后,回复一个带有 ACK 的报文段,表示已收到客户端的结束信号。
- 第三次挥手:服务器完成自身数据的发送后,发送一个带有 FIN 标志的报文段,表示自己也准备关闭连接。
- 第四次挥手:客户端收到服务器的 FIN 后,回复一个带有 ACK 的报文段,表示接受服务器的关闭请求,并等待一段时间以确保服务器收到该确认。
这个四次挥手过程的目的是保证双方都能完整地传输完所有的数据,避免数据丢失或不完整。关闭连接需要双方都发起关闭,并等待对方的确认,以确保数据的可靠性。