前端面试之网络

HTTP2

二进制分帧

HTTP/2 采用二进制格式传输数据,而非 HTTP 1.x 的文本格式,二进制协议解析起来更高效。 HTTP / 1 的请求和响应报文,都是由起始行,首部和实体正文(可选)组成,各部分之间以文本换行符分隔。HTTP/2 将请求和响应数据分割为更小的帧,并且它们采用二进制编码。

HTTP/2 中,同域名下所有通信都在单个连接上完成,该连接可以承载任意数量的双向数据流。每个数据流都以消息的形式发送,而消息又由一个或多个帧组成。多个帧之间可以乱序发送,根据帧首部的流标识可以重新组装。

多路复用

多路复用,代替原来的序列和阻塞机制。所有请求都是通过一个TCP连接并发完成。 HTTP1.x 中,如果想并发多个请求,必须使用多个TCP链接,且浏览器为了控制资源,还会对单个域名有 6-8个的TCP链接请求限制

这一特性,使性能有了极大提升:

  1. 同个域名只需要占用一个 TCP 连接,消除了因多个 TCP 连接而带来的延时和内存消耗。
  2. 单个连接上可以并行交错的请求和响应,之间互不干扰。
  3. 在HTTP/2中,每个请求都可以带一个31bit的优先值,0表示最高优先级, 数值越大优先级越低。有了这个优先值,客户端和服务器就可以在处理不同的流时采取不同的策略,以最优的方式发送流、消息和帧。

服务器推送

服务端可以主动推送,客户端也有权利选择是否接收

头部压缩

  1. HTTP/2在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键-值对,对于相同的数据,不再通过每次请求和响应发送;
  2. 首部表在HTTP/2的连接存续期内始终存在,由客户端和服务器共同渐进地更新;
  3. 每个新的首部键-值对要么被追加到当前表的末尾,要么替换表中之前的值。

简述TCP连接的过程

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
SYN:同步序列编号(Synchronize Sequence Numbers)

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手.

项目中如何处理安全问题

http1.1时如何复用tcp连接

Http/1.0每次请求都需要建立新的TCP连接,连接不能复用。Http/1.1新的请求可以在上次建立的tcp连接之上发送,连接可以复用,即keep-alive。

文件上传如何做断点续传

大文件上传

  1. 前端上传大文件时使用 Blob.prototype.slice 将文件切片,并发上传多个切片,最后发送一个合并的请求通知服务端合并切片
  2. 服务端接收切片并存储,收到合并请求后使用 fs.appendFileSync 对多个切片进行合并
  3. 原生 XMLHttpRequest 的 upload.onprogress 对切片上传进度的监听
  4. 根据每个切片的进度算出整个文件的上传进度

断点续传

  1. 使用 spark-md5 根据文件内容算出文件 hash
  2. 通过 hash 可以判断服务端是否已经上传该文件,从而直接提示用户上传成功(秒传)
  3. 通过 XMLHttpRequest 的 abort 方法暂停切片的上传
  4. 上传前服务端返回已经上传的切片名,前端跳过这些切片的上传

介绍SSL和TLS(寺库)
说说网络的五层模型(寺库)
HTTP劫持、DNS劫持与XSS
永久性重定向(301)和临时性重定向(302)对 SEO 有什么影响
介绍下 HTTPS 中间人攻击
请求时浏览器缓存 from memory cache 和 from disk cache 的依据是什么,哪些数据什么时候存放在 Memory Cache 和 Disk Cache中?
说说浏览器缓存机制

你可能感兴趣的:(面试问题)