http和https在性能上有什么主要的区别吗?我似乎记得读到过HTTPS的速度是HTTP的五分之一。这对当前的web服务器/浏览器有效吗?如果有,是否有相关白皮书支持?
当前回答
这里似乎有一个令人讨厌的边缘情况:Ajax胜过拥塞的wifi。
Ajax通常意味着KeepAlive在20秒后超时。然而,wifi意味着(理想的快速)ajax连接必须进行多次往返。更糟糕的是,wifi经常丢包,并且有TCP重传。在这种情况下,HTTPS执行得非常非常糟糕!
其他回答
开销不是由于加密造成的。在现代CPU上,SSL所需的加密是微不足道的。
造成这种开销的原因是SSL握手,它很长,并且极大地增加了HTTPS会话与HTTP会话之间所需的往返次数。
当服务器处于模拟的高延迟链接末端时,测量(使用Firebug等工具)页面加载时间。有工具可以模拟一个高延迟的链接——对于Linux,有“netem”。在相同的设置中比较HTTP和HTTPS。
延迟可以通过以下方法在一定程度上减轻:
确保您的服务器正在使用HTTP keepalives—这允许客户端重用SSL会话,从而避免了再次握手的需要 将请求的数量减少到尽可能少——通过在可能的地方组合资源(例如.js包括文件,CSS)和鼓励客户端缓存 减少页面加载的次数,例如,将不需要的数据加载到页面中(可能是隐藏的HTML元素),然后使用client-script显示它。
我可以告诉你(作为一个拨号用户),通过SSL访问同一个页面要比通过常规HTTP慢几倍…
HTTPS确实会影响页面速度…
上面的引用揭示了许多人在网站安全和速度方面的愚蠢。HTTPS / SSL服务器握手会在进行互联网连接时造成初始停顿。在访问者的浏览器屏幕上开始呈现任何内容之前会有一个缓慢的延迟。这个延迟是用Time-to-First-Byte信息来衡量的。
HTTPS握手开销出现在时间到第一字节信息(TTFB)中。常见的TTFB范围从低于100毫秒(最好的情况)到超过1.5秒(最坏的情况)。但是,当然,使用HTTPS时,情况要差500毫秒。
无线3G连接的往返时间可以达到500毫秒甚至更多。额外的行程会使延迟加倍,达到1秒或更长时间。这对手机性能有很大的负面影响。非常坏的消息。
我的建议是,如果你不交换敏感数据,那么你根本不需要SSL,但如果你确实喜欢电子商务网站,那么你可以在某些交换敏感数据的页面上启用HTTPS,比如登录和结账。
来源:Pagepipe
HTTP和HTTPS性能比较
与传统的HTTP相比,我总是将HTTPS与较慢的页面加载时间联系起来。作为一个网页开发人员,网页性能对我来说很重要,任何会降低我网页性能的东西都是禁忌。
为了理解所涉及的性能影响,下面的图向您提供了使用HTTPS对资源发出请求时的基本概念。
从上图中可以看出,与使用普通HTTP相比,使用HTTPS需要执行一些额外的步骤。当您使用HTTPS发出请求时,需要进行握手以验证请求的真实性。与HTTP请求相比,这个握手是一个额外的步骤,不幸的是会引起一些开销。
为了理解性能影响并亲自查看性能影响是否显著,我使用这个站点作为测试平台。我访问了webpagetest.org,并使用可视化比较工具来比较使用HTTPS和HTTP加载的站点。
正如您可以从这里看到的测试视频结果使用HTTPS确实对我的页面加载时间有影响,但差异是可以忽略不计的,我只注意到300毫秒的差异。需要注意的是,这些时间取决于许多因素,如计算机性能、连接速度、服务器负载以及与服务器的距离。
您的站点可能有所不同,因此彻底测试您的站点并检查切换到HTTPS所涉及的性能影响非常重要。
目前最上面的答案并不完全正确。
正如其他人在这里指出的,https需要握手,因此需要更多的TCP/IP往返。
在WAN环境中,延迟通常成为限制因素,而不是服务器上增加的CPU使用量。
请记住,从欧洲到美国的延迟大约是200毫秒(往返时间)。
您可以使用HTTPWatch轻松地测量这一点(对于单个用户情况)。
推荐文章
- 什么是“升级-不安全-请求”HTTP报头?
- 为什么更快地检查字典是否包含键,而不是捕捉异常,以防它不?
- HTTP 301和308状态码有什么区别?
- 当启用c++ 11时,std::vector性能回归
- 什么HTTP状态码应该用于错误的输入
- 使用c++ 11的“auto”可以提高性能吗?
- 编排microservices
- std::vector比普通数组慢很多吗?
- 优化PostgreSQL进行快速测试
- 如果性能很重要,我应该使用Java的String.format()吗?
- 使用“var”会影响性能吗?
- 在Python中哪个更快:x**。5还是math.sqrt(x)?
- 数组与列表的性能
- 使用私有静态方法的优点
- 如何使HTTP请求在PHP和不等待响应