面试题 - 前端 - 网络

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

  • 浏览器构建 HTTP Request 请求, DNS 解析 URL 地址、生成 HTTP 请求报文、构建 TCP 连接、使用 IP 协议选择传输路线
  • 将请求通过网络传输到服务端 从客户机到服务器需要通过许多网络设备,一般包括集线器、交换器、路由器等
  • 服务器构建 HTTP Response 响应,响应客户端的请求
  • 将响应体的数据通过网络传输返回给客户端
  • 浏览器渲染页面 解析 HTML、CSS、JS,生成 RenderTree 渲染页面

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

  • 第一次握手:客户端发送 syn 报文,并发送 seq 为 x 序列号给服务端,等待服务端的确认。

  • 第二次握手:服务端发送 syn+ack 报文,并发送 seq 为 Y 的序列号,在确认序列号为 x+1

  • 第三次握手:客户端发送 ack 报文,并发送 seq 序列号为 z,在确认序列号为 y+1

    四次挥手

  • 第一次挥手:先由客户端向服务器端发送一个 FIN,请求关闭数据传输。

  • 第二次挥手:当服务器接收到客户端的 FIN 时,向客户端发送一个 ACK,其中 ack 的值等于 FIN+SEQ

  • 第三次挥手:然后服务器向客户端发送一个 FIN,告诉客户端应用程序关闭。

  • 第四次挥手:当客户端收到服务器端的 FIN 是,回复一个 ACK 给服务器端。其中 ack 的值等于 FIN+SEQ

http200302 的区别

  • http_200 的意思是 成功处理了请求
  • http_302 的意思是(临时移动)服务器目前从不同位置的网页响应请求, 但请求者应继续使用原有位置来进行以后的请求。

你知道哪些 http 首部字段

首部字段名 说明
Cache-Control 控制缓存的行为
Connection 逐跳首部、连接的管理
Date 创建报文的日期时间
Program 报文指令
Trailer 报文末端的首部一览
Transfer-Encoding 指定报文主体的传输编码方式
Upgrade 升级为其他协议
Via 代理服务器的相关信息
Warning 错误通知
Authorization Web 认证信息

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

浏览器每次发起请求时,先在本地缓存中查找结果以及缓存标识,根据缓存标识来判断是否使用本地缓存, 如果缓存有效,则使用本地缓存。
向服务器发起请求并携带缓存标识。根据是否需向服务器发起 HTTP 请求, 将缓存过程划分为两个部分:强制缓存和协商缓存,强缓优先于协商缓存。

  • 强缓存,服务器通知浏览器一个缓存时间,在缓存时间内,下次请求,直接用缓存,不在时间内,执行比较缓存策略。
  • 协商缓存,让客户端与服务器之间能实现缓存文件是否更新的验证、提升缓存的复用率, 将缓存信息中的 Etag 和 Last-Modified,通过请求发送给服务器,由服务器校验,返回 304 状态码时,浏览器直接使用缓存。
  • 解决问题 1.减少了冗余的数据传输 2.减少了服务器的负担,大大提升了网站的性能 3.加快了客户端加载网页的速度

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

  • 建立一个 tcp 连接需要:1,socket 文件描述符;2,IP 地址;3,端口;4,内存

  • 1、内存资源: 一个 tcp 连接最小占用内存为 4096+4096 = 8k, 那么对于一个 8G 内存的机器,在不考虑其他限制下, 最多支持的并发量为:810241024/8 约等于 100 万, 在实际中,由于 linux kernel 对一些资源的限制, 加上程序的业务处理,所以,8G 内存是很难达到 100 万连接的

  • 2、CPU 资源

HTTP2.0 的特点

HTTP2.0 大幅度的提高了 web 性能,在 HTTP1.1 完全语意兼容的基础上,进一步减少了网络的延迟。

1、二进制分帧

2、多路复用

3、首部压缩

4、流量控制

5、请求优先级

6、服务器推送

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

HTTP/1.1 中的消息是“管道串形化”的:只有等一个消息完成之后,才能进行下一条消息;而 HTTP/2 中多个消息交织在了一起,这无疑提高了“通信”的效率。这就是多路复用:在一个 HTTP 的连接上,多路“HTTP 消息”同时工作

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

  • HTTP 协议工作在 80 端口,HTTPS 协议工作在 443 端口

  • HTTPS 需要申请证书(用于验证服务器身份)

  • HTTP 在 TCP 三次握手建立连接之后即可开始传输数据;HTTPS 协议则需要在建立 TCP 连接之后客户端与服务器在进行 SSL 加密,确定对话密钥,完成加密后才开始传输数据。

  • HTTPS 协议传输是密文,HTTP 协议传输是明文

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

CDN 的全称是 Content Delivery Network,即内容分发网络 共有云厂商在全世界各地都遍布不计其数都数据中心和服务器, CDN 服务简单来讲就是这些厂商将你的服务器上面的文档分发到他们不同地区的服务器的当中, 每个地区可以称为一个节点,这样用户在访问你的网址时, 浏览器发送的请求就会优先绕去离客户最近的节点来获取数据, 这样方便客户更快的速度访问网站。 CDN 是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器, 通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容, 降低网络拥塞,提高用户访问响应速度和命中率。CDN 的关键技术主要有内容存储和分发技术。

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

浏览器的策略本质是:一个域名下面的 JS,没有经过允许是不能读取另一个域名的内容,但是浏览器不阻止你向另外一个域名发送请求。 所以 form 表单提交没有跨域问题,提交 form 表单到另外一个域名,原来页面是无法获取新页面的内容,或者说 form 提交后不需要返回,但是 ajax 是需要返回的。 而 ajax 是想要读取响应内容,浏览器是不允许你这么做的。 浏览器的安全策略限制的是 js 脚本,并不限制 src,form 表单提交之类的请求, 就是说 form 表单提交不存在安全问题,ajax 提交跨域存在安全问题。