HTTPS与HTTP速度比较

更新2013-04-25:

这是一个受欢迎的问题,正在得到更多的关注比它应该。 为了阻止错误信息的传播,请阅读以下段落和相关文章:

速度不应该是决定是否使用HTTPS或HTTP的一个因素。 如果您的站点的任何部分(login,注册,信用卡等) 都需要HTTPS那么您绝对需要HTTPS

请阅读SSL不是关于由Troy Hunt encryption的原因。


我认为在https下运行我的整个电子商务网站。 我决定运行一个粗略的基准,通过https和http来衡量一个156KB的图像的下载时间,因为我已经读过了https加载过程中的额外开销。

使用Firefox的Firebug进行基准testing时,只需从空的caching中下载图像时,从networking面板上将“等待”和“接收”时间(所有其他时间为0)转录到Excel。

我的结果是意外的:

http: 11.233 seconds Waiting Receiving Total 1.56 0.88 2.44 1.55 0.101 1.651 1.53 0.9 2.43 1.71 0.172 1.882 1.9 0.93 2.83 https: 9.936 seconds Waiting Receiving Total 0.867 1.59 2.457 0.4 1.67 2.07 0.277 1.5 1.777 0.536 1.29 1.826 0.256 1.55 1.806 

[显而易见]从基准观察:

  • 服务器响应速度更快,但下载时间比http慢。
  • https整体速度较快(〜10%)。

任何人都可以解释为什么会发生?
你认为一个文件(HTML,CSS,JavaScript)会给不同的结果?
有没有人有更好的基准下载方法?


这是testing图像:

[已删除testing图片]

附加信息:

  • 该网站通过Godaddy.com共享托pipe帐户。
  • 如果你想要运行自己的基准testing,请不要添加“www”子域名……无论如何,我都使用静态内容的根目录。
  • 在集成pipe道模式下使用IIS7。

编辑:1px GIF(35字节)的基准:

 http: 2.666 seconds Waiting Receiving Total 0.122 0.31 0.432 0.184 0.34 0.524 0.122 0.36 0.482 0.122 0.34 0.462 0.126 0.64 0.766 https: 2.604 seconds Waiting Receiving Total 0.25 0.34 0.59 0.118 0.34 0.458 0.12 0.34 0.46 0.182 0.31 0.492 0.134 0.47 0.604 

结果:https仍然更快; 尽pipe在这种情况下是平凡的。

如果有人看到我的基准缺陷让我知道,所以我可以发布更好的结果。

所以,在Godaddy共享托pipe在我的特定服务器上通过https服务的内容大约在下午6:00是比HTTP更快。

如果你看看你的时间,http有更长的等待时间和更短的接收时间。 另一方面,https的等待时间更短,接收时间更长。 我将解释为共享主机服务器上的http端口更忙,因此请求在队列中保持更长时间,直到被服务器接受。 一旦被接受,请求的传输速度将比https快。 在https端口上,服务器上的stream量较less,因此请求服务速度更快,但传输时间更长。

对于任何https和http的比较,你都必须考虑到与http相比握手每个请求的时间更长。 做很多小的请求时,你会看到恶化。

您也可能想要考虑到HTTPS文档几乎不会被caching,除了用户浏览器之外的任何地方,所以您可能会发现虽然个人用户几乎没有什么区别,但是HTTP文档对于大量共享caching。 (在某些地方,ISP通过共享代理caching将客户置于其中是非常常见的)

当然,如果这是你不介意用户共享的东西。

我认为通过HTTPS看到的更快的性能不是一种侥幸。

注意你的结果的两件事情:

  1. 在第一个“总计”结果中,HTTP总是比较快,但是在随后的总计中比较慢。
  2. HTTPS结果更一致。

现代负载平衡器通常在SSL使用时启用压缩以帮助性能。 尽pipe最初的SSL握手确实会导致严重的延迟,但用于维护会话的机制(“恢复握手”和对称encryption,而不是非对称encryption)只能增加可以忽略的延迟。 因此,除非您的会话较短,否则您从压缩中获得的性能收益会比从会话维护中损失的更多。

SSL导致大量延迟的传统观点已经过时(除非你的会话很短)。 一些Google工程师撰写了一篇文章,解释以前有关SSL的假设如何不再成立。

https的工作原理如下:首先执行一个4次握手(至less如果我没有记错的话是4路),这里的客户端和服务器同意后面使用的对称encryptionalgorithm和交换证书(包含公钥)。

他们使用公钥encryption交换一个会话(稍后对称密钥的密钥)。

现在他们发送使用会话密钥和一些encryptionalgorithm(3des,aes,rc4,rc5等)encryption的消息。 由于对称encryption不是那么昂贵的操作,下载时间的差异并不那么大。

等待时间较less的原因是因为与https请求相比,在执行https请求时,http端口上的stream量可能较less,或者stream量较less。

所以为了优化性能,你应该使用尽可能less的https连接,因为握手是一个相对昂贵的过程。

您是否通过代理访问您的网站? 如果是这样,您可能会看到更好的性能,因为代理被绕过或减less到只处理初始CONNECT请求。

当您使用HTTP时,代理可能会检查和caching内容 – 导致性能下降。

速度上的差异很大程度上是由于GoDaddy在其服务器上实施HTTP压缩以努力节省带宽,但这种情况并不总是与HTTPS风格的连接发生,因为它是更新的,并且更好地优化来启动。

Interesting Posts