网络面试题总结

发布时间:2023年12月17日

url从输入到渲染页面的全过程

URL 从输入到页面渲染可以分为以下步骤:

  1. 输入 URL:在浏览器地址栏中输入 URL(统一资源定位符)。
  2. DNS 解析:浏览器通过 DNS(域名系统)将 URL 解析成 IP 地址,以便向服务器发送请求。
  3. 建立 TCP 连接:浏览器通过 HTTP 或 HTTPS 协议与服务器建立 TCP 连接,发起网络请求。
  4. 服务器处理请求:服务器接收到请求后,进行处理。这可能包括请求的验证、路由处理、查询数据库或读取文件等操作。
  5. 服务器响应:服务器将处理结果以 HTTP 响应的形式返回给浏览器。
  6. 浏览器接收响应:浏览器接收到服务器的响应,如果响应中包含 HTML 内容,则开始解析 HTML。
  7. 构建 DOM 树:浏览器根据 HTML 内容构建 DOM(文档对象模型)树,表示网页的结构。
  8. 构建 CSSOM 树:同时,浏览器也会解析 CSS 样式文件,构建 CSSOM(CSS 对象模型)树,表示网页的样式信息。
  9. 合并 DOM 和 CSSOM:将 DOM 树和 CSSOM 树合并,生成渲染树(Render Tree),这是浏览器用于渲染页面的树形结构。
  10. 布局(Layout):浏览器根据渲染树计算每个元素在页面中的位置和大小,进行布局。
  11. 绘制(Painting):浏览器根据布局信息将页面内容绘制到屏幕上。
  12. 页面渲染完成:整个页面加载、布局和绘制过程完成,用户可以看到完整的页面内容。

这些步骤构成了从输入 URL 到页面渲染的全过程。在此过程中,浏览器和服务器之间的网络请求、数据传输、内容解析和页面渲染等环节相互配合,最终将网页呈现给用户。

tcp三次握手,四次挥手,可靠传输原理

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议。它通过三次握手建立连接和四次挥手断开连接来确保数据可靠传输。

三次握手(Establishing Connection):

  1. 客户端发送 SYN:客户端向服务器发送一个 SYN(同步)标志的数据包,表示请求建立连接,并指定自己的初始序列号(sequence number)。
  2. 服务器响应 SYN + ACK:服务器接收到 SYN 数据包后,会回复一个确认包,其中也包含 SYN 标志和确认号(acknowledgment number),表示确认客户端的连接请求,并指定自己的初始序列号。
  3. 客户端发送 ACK:客户端收到服务器的确认包后,再发送一个确认包,确认服务器的响应。此时连接建立完成,双方可以开始数据传输。

四次挥手(Terminating Connection):

  1. 发起关闭:当客户端或服务器想要关闭连接时,发送一个 FIN(结束)标志的数据包,表示数据发送完毕,但仍能接收数据。
  2. 确认关闭:接收到 FIN 的一方发送 ACK 确认收到,并进入半关闭状态,即不再向对方发送数据,但仍能接收数据。
  3. 对方关闭:当另一方确认后,它也发送一个 FIN 数据包给另一端,表示自己也准备好关闭连接。
  4. 最后确认:接收到对方的 FIN 后,发送 ACK 确认收到,双方完成关闭连接,进入 TIME-WAIT 状态,等待一段时间后彻底关闭连接。

可靠传输原理:

TCP 通过序列号、确认号、校验和、重传机制等手段来确保可靠传输:

  • 序列号和确认号:序列号用于按序传输数据,并确保数据的可靠性。确认号用于确认收到的数据,双方交互确认数据的收发情况。
  • 校验和:TCP 对数据包进行校验和计算,接收端可以通过校验和来检测数据是否损坏,如果损坏则要求重新发送。
  • 重传机制:当发送方发送数据后,如果在一定时间内未收到确认,就会触发超时重传机制,重新发送数据。同时,接收端会丢弃重复的数据包。

通过这些机制,TCP 实现了可靠传输,保证了数据的正确性和可靠性,即使在网络不稳定或出现丢包的情况下,也能保证数据的正确传输。

http200302 的区别

HTTP 200HTTP 302 是 HTTP 协议中的两种状态码,表示服务器对请求的响应状态不同。

  • HTTP 200:表示请求成功。当服务器成功处理请求并返回所请求的页面或资源时,会返回状态码 200。这通常是在正常情况下返回的状态码,表示服务器成功地处理了客户端的请求。
  • HTTP 302:表示临时重定向。当服务器接收到请求后,发现请求的资源暂时被移到了另一个位置,会返回状态码 302,并在响应头中包含一个 Location 字段,指向新的资源位置。客户端会自动跳转到新的位置去获取资源。

简单来说,HTTP 200 表示请求成功,服务器正常响应;而 HTTP 302 表示临时重定向,告诉客户端资源暂时被移动到其他位置,需要去新的位置获取资源。

通常情况下,HTTP 302 会和其他状态码一起使用,比如 302 + 200 表示重定向到新的资源成功获取。

你知道哪些http首部字段?

HTTP 协议定义了许多不同类型的首部字段,这些字段可以用于请求和响应消息中,提供了关于消息、服务器、客户端等信息的描述和控制。以下是一些常见的 HTTP 首部字段:

通用首部字段(General Headers):

  • Cache-Control:控制缓存行为。
  • Connection:控制连接的选项。
  • Date:表示消息产生的日期和时间。
  • Pragma:用于包含实现特定的首部字段。

请求首部字段(Request Headers):

  • Host:指定请求资源的主机名和端口号。
  • User-Agent:包含发起请求的用户代理信息。
  • Accept:指定客户端能够接收的内容类型。
  • Cookie:包含 HTTP 请求发送的 Cookie。
  • Authorization:包含授权信息。

响应首部字段(Response Headers):

  • Server:包含服务器的信息。
  • Content-Type:指定响应的内容类型。
  • Set-Cookie:服务器通过响应头设置客户端的 Cookie。
  • Location:用于重定向时指定新的资源位置。

实体首部字段(Entity Headers):

  • Content-Length:表示实体主体的长度(以字节为单位)。
  • Content-Encoding:指定实体主体的编码方式。
  • Content-Disposition:指示浏览器应该如何显示附加的文件。

这些是 HTTP 协议中的一部分首部字段,不同的首部字段提供了各种不同的功能和控制,用于帮助服务器和客户端处理请求和响应消息。

说一下http缓存策略,有什么区别,分别解决了什么问题?

HTTP 缓存策略是为了提高性能、减少网络负载而设计的,主要有以下几种:

1. 强缓存(Strong Cache):

  • Expires 头部:服务器返回资源时,在响应头中包含过期时间。客户端再次请求资源时,会先检查本地缓存是否过期,如果没有过期,则直接使用缓存数据,不发起请求。
  • Cache-Control 头部:使用 Cache-Control: max-age=seconds 来指定资源在缓存中的有效时间,单位是秒。与 Expires 不同的是,Cache-Control 可以提供更加精确的缓存控制。

问题解决:减少请求次数,加快页面加载速度,降低服务器压力。

2. 协商缓存(Conditional Cache):

  • Last-Modified 和 If-Modified-Since 头部:服务器在响应头中返回资源的最后修改时间(Last-Modified),客户端再次请求资源时,通过 If-Modified-Since 发送上次资源的最后修改时间,服务器判断资源是否更新,若未更新则返回 304 Not Modified,客户端直接使用本地缓存。
  • ETag 和 If-None-Match 头部:服务器返回资源的唯一标识符(ETag),客户端再次请求资源时,通过 If-None-Match 发送上次资源的 ETag,服务器判断资源是否更新,若未更新则返回 304 Not Modified,客户端直接使用本地缓存。

问题解决:确保缓存的资源与服务器上的资源保持同步,并减少了传输的数据量。

区别和作用:

  • 强缓存协商缓存都能减少服务器负载和网络传输量,但强缓存是直接使用本地缓存,不与服务器发生交互;而协商缓存需要向服务器发送请求来验证资源是否更新,与服务器有交互。
  • 强缓存解决了“不需要向服务器发起请求”的问题,而协商缓存解决了“需要向服务器询问资源是否更新”的问题。

综合使用强缓存和协商缓存可以在一定程度上提高网站性能,并根据资源的特性选择合适的缓存策略。

为什么浏览器要限制TCP的最大个数

浏览器限制 TCP 连接的最大数量是为了保护系统资源、提高网络性能和防止过度占用服务器资源。

为什么要限制?

  1. 资源限制:每个 TCP 连接都需要消耗系统资源,包括内存、CPU 和网络资源。过多的连接可能导致系统资源不足,影响系统稳定性和性能。
  2. 性能优化:当浏览器同时建立大量的 TCP 连接时,可能导致网络拥塞、延迟增加、丢包率提高等问题,从而影响网络性能和用户体验。
  3. 防止滥用:过多的连接可能被恶意利用,例如 DDoS 攻击、爬虫等,会给服务器带来不必要的压力,限制连接数量可以防止这种滥用。

浏览器对连接数量的限制:

浏览器通常对同一域名下的连接数量有一定限制。不同浏览器可能有不同的限制,但一般情况下是针对同一域名,对并行连接数量有一定的限制,这被称为同一域名的并发连接数限制。

这种限制可以通过在不同域名下加载资源(比如使用 CDN、多个子域名等)来规避,因为浏览器对于不同域名的连接数限制是独立的。同时,HTTP/2 或者 HTTP/3 的多路复用机制可以更有效地利用 TCP 连接,减少了过多连接带来的压力。

HTTP2.0的特点

HTTP/2 是 HTTP 协议的一个重要更新版本,相对于 HTTP/1.1 带来了许多改进和优化,其主要特点包括:

1. 多路复用(Multiplexing):

  • 单一连接:HTTP/2 允许在单个 TCP 连接上同时发送多个请求和响应,避免了 HTTP/1.x 中的队头阻塞问题(头部阻塞影响并发请求),提高了性能和效率。

2. 二进制分帧(Binary Framing):

  • 二进制传输:HTTP/2 将所有传输的信息分割为更小的帧(frames),并采用二进制格式对数据进行编码传输,相比于 HTTP/1.x 中的文本格式,更加高效。

3. 头部压缩(Header Compression):

  • HPACK 算法:HTTP/2 使用 HPACK 算法对 HTTP 头部进行压缩,减少了重复头部信息的传输,节省带宽,提高效率。

4. 服务器推送(Server Push):

  • 主动推送:HTTP/2 允许服务器在客户端请求某个资源时,主动将相关的资源一并推送给客户端,减少了额外的往返请求时间,提高了页面加载速度。

5. 流量控制(Flow Control):

  • 流量控制:HTTP/2 引入了流量控制机制,可以避免因服务器推送资源过多而导致客户端性能问题,保证资源传输的平稳性。

6. 优化首部字段:

  • 二进制首部:HTTP/2 使用二进制格式传输数据和头部信息,相较于文本格式,减少了额外的数据传输和开销。

总体来说,HTTP/2 带来了许多性能和效率上的改进,能够更快速、更高效地传输数据,减少了延迟,提高了网络性能。

说一下HTTP2 多路复用原理,以及多路复用优势?

HTTP/2 中的多路复用是指在单个 TCP 连接上可以同时传输多个请求和响应的能力,其原理和优势如下:

多路复用原理:

  1. 单一连接:HTTP/2 使用单个 TCP 连接来传输所有的请求和响应。
  2. 数据分帧:所有 HTTP/2 通信都在一个连接上完成,数据被分割成更小的帧(frames),每个帧都标记了其在消息中的位置。
  3. 流(Stream):每个 HTTP/2 连接上可以有多个流(stream),每个流都是一个虚拟的数据通道,可以独立传输请求和响应的数据。
  4. 并发传输:在单个 TCP 连接上,多个流可以同时进行数据传输,不再受到 HTTP/1.x 中的队头阻塞问题。

多路复用优势:

  1. 提高并发性:HTTP/2 可以在一个连接上同时发送多个请求和响应,解决了 HTTP/1.x 中的队头阻塞问题,提高了并发性能。
  2. 减少连接数:相对于 HTTP/1.x 中需要多个连接来处理并发请求,HTTP/2 中的多路复用减少了连接数,减少了网络开销和资源占用。
  3. 降低延迟:多路复用减少了连接建立和关闭的时间,减少了往返时间(RTT),加速了请求和响应的传输。
  4. 资源有效利用:充分利用单个 TCP 连接的带宽资源,提高了网络的有效利用率。

总的来说,HTTP/2 的多路复用能够在单个连接上更有效地管理和传输多个请求和响应,避免了 HTTP/1.x 中连接数过多、队头阻塞等问题,提高了网络性能和效率。

简述https原理,以及与http的区别

HTTPS(HyperText Transfer Protocol Secure)是一种安全的通信协议,相对于 HTTP,在传输过程中对数据进行加密,保证数据在传输过程中的安全性和完整性。

HTTPS 原理:

  1. 加密通信:HTTPS 使用 SSL/TLS 协议对传输的数据进行加密和认证,保证数据在传输过程中的安全性。在建立连接时,通过公钥加密的方式来确保通信的安全性。
  2. 数字证书:服务器需要获得数字证书,证明网站身份。这个证书由权威的证书颁发机构(CA,Certificate Authority)颁发,包含了服务器的公钥。
  3. 加密方式:HTTPS 使用对称加密和非对称加密相结合的方式,对称加密用于加密传输的数据,非对称加密用于传输对称加密的密钥。

HTTP 与 HTTPS 区别:

  1. 安全性:HTTP 是明文传输,数据不加密,容易被窃听和篡改;而 HTTPS 通过加密传输数据,确保通信的安全性。
  2. 协议:HTTP 是超文本传输协议,直接传输数据;HTTPS 是在 HTTP 上加入 SSL/TLS 加密协议传输数据。
  3. 端口:HTTP 默认端口为 80,HTTPS 默认端口为 443。
  4. 证书:HTTPS 需要获取有效的数字证书,用于验证服务器的身份和加密通信;HTTP 不需要数字证书,是明文传输。
  5. 性能:HTTPS 因为加密和解密的过程,相对于 HTTP 会稍微降低性能,但随着硬件和算法的发展,这种差距已经减小。

综上所述,HTTPS 主要在数据传输过程中加入了加密和认证机制,保障了数据的安全性,而 HTTP 则是明文传输,安全性较低。因此,对于涉及隐私信息、支付等敏感操作的网站,通常会采用 HTTPS 来保障通信安全。

CDN 是什么?描述下 CDN 原理?为什么要用 CDN?

CDN(Content Delivery Network,内容分发网络)是一种通过部署在全球不同地理位置的服务器来提供高效内容传输的网络架构。它通过将内容分发到离用户更近的服务器上,以加速用户访问网站或应用程序的速度,提高性能和可靠性。

CDN 原理:

  1. 内容缓存:CDN 提供商在全球不同的节点上部署服务器(缓存节点),这些节点存储着网站或应用程序的静态内容,如图片、视频、脚本、样式表等。
  2. 就近访问:当用户请求访问某个网站或应用时,CDN 系统会根据用户的位置,将请求路由到距离用户最近的缓存节点。
  3. 缓存策略:如果缓存节点中已经存在用户请求的内容,CDN 直接从缓存中返回内容,减少了数据传输的时间和成本。
  4. 动态内容加速:对于动态内容,CDN 也可以通过一些优化技术,如负载均衡、内容压缩、TCP/TLS 协议优化等来加速传输。

使用 CDN 的原因:

  1. 加速访问速度:通过在全球范围内部署节点,提高了用户对网站和应用程序的访问速度,减少了网络延迟。
  2. 减轻源服务器负载:CDN 可以分担源服务器的负载,将部分请求分发到各个节点,降低源服务器的压力。
  3. 提高可靠性和稳定性:分布式部署使得即使在某个地区出现故障,仍然可以从其他节点获取内容,提高了系统的稳定性和可靠性。
  4. 节省带宽成本:通过缓存内容和就近访问,减少了数据传输的成本。

总的来说,CDN 可以提高网站和应用程序的性能、稳定性,降低服务器负载,节省带宽成本,是优化网络内容传输的重要手段。

DNS 查询的过程,分为哪两种,是怎么一个过程

DNS(Domain Name System,域名系统)查询过程可以分为递归查询和迭代查询两种。

1. 递归查询(Recursive Query):

  • 客户端请求:客户端向本地 DNS 服务器发出查询请求,本地 DNS 服务器负责完成整个解析过程。
  • 追踪查询:本地 DNS 服务器根据查询的域名(例如:www.example.com)开始查询,如果本地 DNS 服务器有缓存或配置了相应的记录,则直接返回解析结果给客户端。
  • 迭代查询:如果本地 DNS 服务器没有缓存或者配置了相应记录,它会向根域名服务器发出查询请求,根域名服务器告知本地 DNS 服务器所查询域的顶级域名服务器的地址。
  • 向下查询:本地 DNS 服务器再向顶级域名服务器发送查询请求,顶级域名服务器告知本地 DNS 服务器所查询域的权威域名服务器的地址。
  • 获取结果:本地 DNS 服务器向权威域名服务器发出最后的查询请求,权威域名服务器返回请求的域名对应的 IP 地址,并将结果返回给客户端。

2. 迭代查询(Iterative Query):

  • 客户端请求:客户端向本地 DNS 服务器发出查询请求,本地 DNS 服务器并不负责完成整个解析过程。
  • 指导查询:本地 DNS 服务器根据查询的域名(例如:www.example.com)开始查询,如果本地 DNS 服务器有缓存或配置了相应的记录,它会返回结果给客户端,否则会返回一个指向更高级别的 DNS 服务器的指引。
  • 层层查询:客户端根据本地 DNS 服务器返回的指引,向指定的 DNS 服务器发出新的查询请求,依次进行下一层的查询,直到找到对应域名的 IP 地址,然后将结果返回给客户端。

这两种查询方式的主要区别在于递归查询是由本地 DNS 服务器负责完成整个解析过程,而迭代查询是根据指引由客户端逐级发起查询。

强缓存和协商缓存的区别

强缓存和协商缓存都是用于缓存资源的机制,它们之间的主要区别在于缓存判断的依据和判断流程。

强缓存(Strong Cache):

  • 依据:利用响应头中的 Cache-ControlExpires 字段进行判断。
  • 判断流程:当客户端发起请求时,浏览器会先检查缓存的过期时间或者最后修改时间,如果没有过期或者未到最后修改时间,则直接使用缓存数据,不会向服务器发送请求。
  • 相关字段:常用字段有 Cache-Control 中的 max-age(最大缓存时间)和 Expires(过期时间)。

协商缓存(Conditional Cache):

  • 依据:利用响应头中的 Last-ModifiedETag 字段进行判断。
  • 判断流程:当客户端发起请求时,浏览器会向服务器发送一个条件请求,包含上次请求资源的 Last-ModifiedETag 值。服务器根据请求头中的条件值来判断资源是否发生了修改,若未修改则返回 304 Not Modified,客户端直接使用缓存数据。
  • 相关字段:响应头中包含 Last-Modified(资源最后修改时间)和 ETag(资源标识符)字段。

区别:

  • 判断依据:强缓存是根据缓存的时间或过期标识来判断是否使用缓存;协商缓存则是根据请求头中的条件字段与服务器进行通信,由服务器来判断资源是否需要更新。
  • 优先级:强缓存优先级高于协商缓存,如果强缓存生效,则不会进行协商缓存的验证。
  • 缓存失效机制:强缓存失效后会进行协商缓存验证,若未发生改变,则继续使用缓存;协商缓存失效后,会重新获取完整的资源。

综合利用强缓存和协商缓存可以更有效地控制缓存的策略,提高网页加载速度,减少服务器压力。

为什么from表单提交没有跨域问题,但ajax有跨域问题

这个差异源于浏览器对不同类型请求的跨域策略不同。主要是因为浏览器对于不同类型请求的安全策略有所区别:

Form 表单提交:

  • 当使用 HTML <form> 表单提交时,这种提交方式不会触发浏览器的同源策略限制,即使提交的目标地址与当前页面的地址不同也可以成功提交。这是由浏览器设计和规范决定的,早期的 Web 应用主要通过表单提交来进行数据交互,因此这种方式并未受到同源策略的限制。

AJAX 请求:

  • 通过 JavaScript 发起的 AJAX 请求,是由浏览器内置的 XMLHttpRequest 对象发起的。浏览器对 AJAX 请求实施了同源策略,即当前网页发起的 AJAX 请求只能访问与该页面同源(协议、域名、端口完全相同)的资源。这是为了防止跨站请求伪造(CSRF)等安全风险,确保用户数据的安全性。

所以,尽管表单提交与 AJAX 请求都可以向不同的源提交数据,但浏览器对于这两种方式的跨域处理是不同的,主要出于安全考虑。如果需要在 AJAX 请求中进行跨域访问,可以通过 CORS(Cross-Origin Resource Sharing,跨源资源分享)等机制来进行处理,服务器端需要进行相应的配置以允许跨域请求。

文章来源:https://blog.csdn.net/wsq_yyds/article/details/134992225
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。