http和https在性能上有什么主要的区别吗?我似乎记得读到过HTTPS的速度是HTTP的五分之一。这对当前的web服务器/浏览器有效吗?如果有,是否有相关白皮书支持?


当前回答

在许多情况下,SSL握手对性能的影响将由于SSL会话可以缓存在两端(桌面和服务器)而得到缓解。例如,在Windows机器上,SSL会话可以缓存长达10个小时。见http://support.microsoft.com/kb/247658/EN-US。一些SSL加速器还具有允许您优化会话缓存时间的参数。

另一个需要考虑的影响是,通过HTTPS提供的静态内容不会被代理缓存,这可能会降低通过同一个代理访问站点的多个用户的性能。这可以通过静态内容也会缓存到桌面的事实来缓解,Internet Explorer版本6和7缓存可缓存的HTTPS静态内容,除非另有指示(工具菜单/Internet选项/高级/安全/不将加密页面保存到磁盘)。

其他回答

开销不是由于加密造成的。在现代CPU上,SSL所需的加密是微不足道的。

造成这种开销的原因是SSL握手,它很长,并且极大地增加了HTTPS会话与HTTP会话之间所需的往返次数。

当服务器处于模拟的高延迟链接末端时,测量(使用Firebug等工具)页面加载时间。有工具可以模拟一个高延迟的链接——对于Linux,有“netem”。在相同的设置中比较HTTP和HTTPS。

延迟可以通过以下方法在一定程度上减轻:

确保您的服务器正在使用HTTP keepalives—这允许客户端重用SSL会话,从而避免了再次握手的需要 将请求的数量减少到尽可能少——通过在可能的地方组合资源(例如.js包括文件,CSS)和鼓励客户端缓存 减少页面加载的次数,例如,将不需要的数据加载到页面中(可能是隐藏的HTML元素),然后使用client-script显示它。

一个更重要的性能差异是HTTPS会话在用户连接时保持打开。一个HTTP“会话”只持续一个项目请求。

如果你正在运行一个有大量并发用户的网站,预计会购买大量内存。

在许多情况下,SSL握手对性能的影响将由于SSL会话可以缓存在两端(桌面和服务器)而得到缓解。例如,在Windows机器上,SSL会话可以缓存长达10个小时。见http://support.microsoft.com/kb/247658/EN-US。一些SSL加速器还具有允许您优化会话缓存时间的参数。

另一个需要考虑的影响是,通过HTTPS提供的静态内容不会被代理缓存,这可能会降低通过同一个代理访问站点的多个用户的性能。这可以通过静态内容也会缓存到桌面的事实来缓解,Internet Explorer版本6和7缓存可缓存的HTTPS静态内容,除非另有指示(工具菜单/Internet选项/高级/安全/不将加密页面保存到磁盘)。

考虑到SSL需要一个非sll HTTP不需要的额外加密步骤,这几乎肯定是正确的。

这个问题没有一个单一的答案。

加密总是会消耗更多的CPU。在许多情况下,这可以卸载到专用的硬件上,成本将根据所选择的算法而变化。例如,3des比AES更贵。有些算法对加密者来说比解密者更昂贵。有些则有相反的代价。

比批量加密更昂贵的是握手成本。新的连接将消耗更多的CPU。这可以通过会话恢复来减少,代价是保留旧的会话秘密直到它们过期。这意味着来自客户端的小请求是最贵的。

对于跨互联网流量,您可能不会注意到数据速率的成本,因为可用带宽太低了。但您肯定会在繁忙的服务器上的CPU使用情况中注意到这一点。