我有一个带有http / 2(中等速度)的托管Web服务器,此外,我在只有http / 1.1的快速CDN服务器上有一个空间。 是建议从CDN加载某些资源,还是因为http / 2而仅使用Web服务器? 由于http / 1.1,从CDN加载太多资源可能会成为瓶颈? 会得到一些提示...
答案 0 :(得分:1)
您需要测试。这实际上取决于您的应用程序,用户和服务器。
在HTTP / 1.1下,您只能使用6 connections to a domain。因此,将内容托管在单独的域(例如static.example.com)上或从CDN加载是将限制增加到超过6的一种方法。这些单独的域通常也没有cookie,因为它们位于单独的域上,对性能有好处。和安全性。最后,如果从code.jquery.com加载jQuery,那么您可能会受益于已经为另一个站点下载了jQuery的用户,因此请完全保存该下载内容(尽管有了库和CDN的版本数,已经有一个常用库的机会了)在我看来,下载并保存在浏览器缓存中是有问题的。
但是,单独的域需要建立单独的连接。这意味着DNS查找,TCP连接以及通常的HTTPS握手。这一切都需要时间,尤其是如果仅下载一项资产(例如jQuery),那么那些资产通常会因为将资产托管在单独的网站上而吃光了任何收益!实际上,这就是为什么浏览器将连接数限制为6的原因-将其增加到6以上会使收益率递减。因此,我一直在质疑分片域的价值,人们不应该仅仅认为它们会更快。
HTTP / 2旨在通过允许multiplexing来消除对单独连接的需求,从而解决了对单独域(又称为分片域)的需求,从而有效地消除了6个“连接”的限制,但没有缺点单独的连接。它们还允许HTTP标头压缩,从而减少了来回发送大cookie的性能下降。
因此,从这种意义上讲,我建议仅从本地服务器提供所有服务。当然,不是所有人都使用HTTP / 2,而是所有人使用support is incredible strong,因此大多数用户都应该使用。
但是,CDN的另一个好处是它们通常是全局分布的。因此,位于世界另一端的用户可以连接到本地CDN服务器,而不必一直回到您的服务器。这有助于缩短连接时间(因为TCP握手和HTTPS握手基于较短的距离),并且内容也可以缓存在此。尽管如果CDN必须将原始内容重新引用到原始服务器,那么仍然存在滞后(尽管TCP和HTTPS设置的好处仍然存在)。
因此从这个意义上讲,我建议您使用CDN。但是,我想说的是,所有内容都通过该CDN放置,而不仅仅是您建议的一部分,但是您说对了,HTTP / 1.1可能会限制其实用性。这很奇怪,因为大多数商业CDN支持HTTP / 2,并且您还说您有一台“ CDN服务器”(而不是服务器网络-复数形式),因此您可能是指静态域,而不是真正的CDN ?
无论哪种方式,都取决于测试,如该答案开头所述,它实际上取决于您的应用程序,用户和服务器,这里没有一个确定的答案。
希望这使您对要考虑的事情有所了解。如果您想了解更多,因为Stack Overflow确实不是其中的一部分,而且此答案已经足够长了,那么我刚刚写了一本书,其中大部分内容都在讨论这一切:https://www.manning.com/books/http2-in-action < / p>