3

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

12月3日提问

1 个回答

0

已采纳

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

举例:浏览器收到 html 之后有三个文件a.cssb.jsc.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 分开放。。。

推广链接