HTTP2域碎片而不会伤害性能



大多数文章都将使用域碎片视为受伤的性能,但实际上并非完全正确。在某些情况下,可以为不同域重复使用单个连接:

  • 他们解决了相同的IP
  • 在安全连接的情况下,相同的证书应覆盖两个域

https://www.rfc-editor.org/rfc/rfc7540#section-9.1.1

是正确的吗?有人在使用它吗?

那CDN呢?我可以保证他们将用户引导到同一服务器(IP)吗?

是的,这是http/2的好处之一,从理论上讲,您可以继续为http/1.1用户划分,并自动为http/2用户脱落。

现实一如既往地变得更加复杂 - 主要是由于实现问题和服务器在您陈述时解决了不同的IP地址。这篇博客文章现在已经有几年了,但描述了一些问题:https://daniel.haxx.se/blog/2016/08/18/http2-connection-coalescing/。从那时起,也许它得到了改善,但会想象问题仍然存在。此外,诸如原始框架之类的新功能应该有所帮助,但尚未得到广泛支持。

我认为,值得重新审视这样的假设,即碎片实际上对HTTP/1.1有益。建立新连接的成本(DNS查找,TCP设置,TLS握手,然后是实际发送的HTTP消息)并非无关紧要,并且研究表明,实际上使用了6个连接浏览器限制,从而通过碎片来添加更多。串联,弹簧和内线通常是更好的选择,这些选择仍然可以用于HTTP/2。在您的网站上尝试并测量是确定此的最佳方法!

出于这些原因(和安全性),我不太热衷于使用常见的库(例如jQuery,Bootstrap ...等),而不是本地托管。在我看来

使用这些东西,http/1.1仍然没有碎片域。它可能(可以说)较慢,但不会破裂。但是大多数用户可能都在HTTP/2上,因此真的值得为少数用户增加复杂性吗?这不是一种逐步增强您的网站供现代浏览器上的人(鼓励那些不升级的人)的方式吗?对于较大的网站(例如Google,Facebook ...等),少数群体仍然代表大量用户,复杂性是值得的(他们有资源和专业知识可以处理它)建议不是碎片,而是要升级到http/2之类的新协议时(就像现在一样!),而是保持复杂性。

最新更新