面试题:如何在Http1.1基础上实现多路复用?

在我叙述完Http2.0与Http1.1的区别后,面试官来了一句如何在Http1.1基础上实现多路复用?
这下好了,又到了我的知识盲区了 文本转换为流?怎样保证顺序?
没有钱.png

已解决 悬赏分:40 - 解决时间 2021-11-26 14:36
反对 0举报 0 收藏 0

回答1

最佳
  • @

    好问题,先点个赞
    个人看法仅供参考
    其实这里就是要利用现有的服务端+keep-alive+浏览器实现:
    0.合并请求
    1.多文件合成流
    2.多个流同时发送/接受
    3.校验完整性、合并、执行

    举例:浏览器收到 html 之后有三个文件a.css,b.js,c.jpg,正常应该是顺序加载的
    0.原 http 需要同步加载的三个文件,<link href="a.css"> <script src="b.js"> <img src="c.jsp>,变成了一段异步请求12个blob的一段js,这12个blob来自两个不同的域
    1.原来服务器上放的三个文件,现在以二进制的形式存放于12个文件中,放在两个不同域上
    2.http文件加载,js执行,blob异步接受,promise.all 的时候合并成字符串。合并后的字符串应该就是<style>*{...}</style>,<script>({}())()</script>,<img src="base64:img/jpg"> 的形式
    3.完整性其实http本身就实现了,顶多监听个 onerror 重新加载。上面字符串按照设定好的顺序插入DOM即可


    blob 是模拟 http2 的流
    两个域是绕开浏览器每个域同时下载6个文件的限制


    但这只是一次 http 加载,之后还要进行加载的话。。。那还要把之后有可能加载的文件都给 blob 分开放。。。

    支持 0 反对 0 举报
    2021-11-25 16:01