前端面试之网络

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状态,完成三次握手.app

项目中如何处理安全问题tcp

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中?说说浏览器缓存机制

相关文章
相关标签/搜索