面试题:如何在Http1.1基础上实现多路复用?
在我叙述完Http2.0与Http1.1的区别后,面试官来了一句如何在Http1.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 分开放。。。
以上是 面试题:如何在Http1.1基础上实现多路复用? 的全部内容, 来源链接: utcz.com/a/150458.html