我找不到这个 RFC,我想知道是否有任何关于如何将来自 HTTP/2 客户端的资源请求映射到 HTTP/2 流的规则。
是一对一的,每个流代表一个资源请求的数据(例如图像,js,html)还是可以使用一个流传输多个资源?
流优先级与流依赖项有何不同(对我来说两者都直接影响资源检索的最终顺序)?浏览器如何处理流和流依赖项是否有任何通用策略?
非常感谢您的帮助!
我找不到这个 RFC,我想知道是否有任何关于如何将来自 HTTP/2 客户端的资源请求映射到 HTTP/2 流的规则。
是一对一的,每个流代表一个资源请求的数据(例如图像,js,html)还是可以使用一个流传输多个资源?
来自HTTP/2 RFC:
请求的复用是通过让每个 HTTP 请求/响应交换与其自己的流相关联来实现的(第 5 节)。
以及后来:
流标识符不能重复使用。
至于你接下来的问题:
流优先级与流依赖项有何不同(对我来说两者都直接影响资源检索的最终顺序)?
它们是同一优先级排序方案的一部分。相关性允许某些资源优先于其他资源发送,而优先权加权允许资源同时发送但加权以将更多的可用带宽分配给某些资源。
浏览器如何处理流和流依赖项是否有任何通用策略?
它们都以相同的方式处理流,但处理依赖关系的方式完全不同。
Chrome经常使用依赖项,并在单个依赖项上创建一个长链,应尽可能按顺序解析。更高优先级的资源被添加到链上。Chrome 不使用权重 a。
Safari做相反的事情,发送所有请求而没有依赖关系,但具有适当的权重。
Firefox使用权重和依赖关系创建了一个复杂的依赖关系树。
Old Edge没有优先级,因此使用 HTTP/2 默认的同等权重资源,没有依赖项。New Edge 基于 Chrome,因此遵循这一点。
人们普遍认为 Chrome 通常更好,但在下载最好并行下载的资源时会受到影响(例如图像 - 特别是渐进式 JPEG)。Firefox 在这方面做得更好,但对于需要完整下载的资源(例如关键 CSS 和 JS)而言,效果稍差。Safari 唯一可以,而且通常比两者都差。旧的Edge绝对是最糟糕的。这是关于事态的好谈话:https : //m.youtube.com/watch?v=sgjxuhFQktE
对于 HTTP/3,他们正在考虑改变他们的复杂模型。在这里好好谈谈:https : //m.youtube.com/watch?v=nH4iRpFnf1c&feature=youtu.be
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句