http和https在性能上有什么主要的区别吗?我似乎记得读到过HTTPS的速度是HTTP的五分之一。这对当前的web服务器/浏览器有效吗?如果有,是否有相关白皮书支持?
当前回答
考虑到SSL需要一个非sll HTTP不需要的额外加密步骤,这几乎肯定是正确的。
其他回答
我可以告诉你(作为一个拨号用户),通过SSL访问同一个页面要比通过常规HTTP慢几倍…
在许多情况下,SSL握手对性能的影响将由于SSL会话可以缓存在两端(桌面和服务器)而得到缓解。例如,在Windows机器上,SSL会话可以缓存长达10个小时。见http://support.microsoft.com/kb/247658/EN-US。一些SSL加速器还具有允许您优化会话缓存时间的参数。
另一个需要考虑的影响是,通过HTTPS提供的静态内容不会被代理缓存,这可能会降低通过同一个代理访问站点的多个用户的性能。这可以通过静态内容也会缓存到桌面的事实来缓解,Internet Explorer版本6和7缓存可缓存的HTTPS静态内容,除非另有指示(工具菜单/Internet选项/高级/安全/不将加密页面保存到磁盘)。
对此有一个非常简单的答案:分析您的web服务器的性能,看看在您的特定情况下性能损失是什么。有几个工具可以比较HTTP和HTTPS服务器的性能(我想到了JMeter和Visual Studio),而且它们很容易使用。
没有人能给你一个有意义的答案没有一些关于你的网站的性质,硬件,软件和网络配置的信息。
正如其他人所说,由于加密,会有一定程度的开销,但它高度依赖于:
硬件 服务器软件 动态与静态内容的比例 客户端到服务器的距离 典型会话长度 等等(我个人的最爱) 客户端的缓存行为
根据我的经验,动态内容较多的服务器受HTTPS的影响较小,因为与内容生成时间相比,加密所花费的时间(ssl开销)微不足道。
大量服务于相当小的静态页面集(这些页面可以很容易地缓存在内存中)的服务器会遭受更高的开销(在一个案例中,吞吐量在“内部网”上受到了影响)。
编辑:有一点已经被其他几个人提出,SSL握手是HTTPS的主要成本。这是正确的,这就是为什么“典型会话长度”和“客户端的缓存行为”很重要。
很多非常短的会议意味着握手时间将压倒其他任何表现因素。较长的会话将意味着在会话开始时产生握手成本,但后续请求的开销将相对较低。
Client caching can be done at several steps, anywhere from a large-scale proxy server down to the individual browser cache. Generally HTTPS content will not be cached in a shared cache (though a few proxy servers can exploit a man-in-the-middle type behavior to achieve this). Many browsers cache HTTPS content for the current session and often times across sessions. The impact the not-caching or less caching means clients will retrieve the same content more frequently. This results in more requests and bandwidth to service the same number of users.
有一种方法可以衡量这一点。来自apache的jmeter工具将测量吞吐量。如果您在受控环境中使用jmeter对您的服务进行了大量采样,无论是否使用SSL,都应该得到相对成本的准确比较。我对你的结果很感兴趣。
这里有一篇关于SSL握手延迟的很棒的文章(有点老,但仍然很棒)。帮助我确定SSL是客户端通过较慢的互联网连接使用我的应用程序的缓慢的主要原因:
http://www.semicomplete.com/blog/geekery/ssl-latency.html
推荐文章
- 有没有办法在python中做HTTP PUT
- .NET反射的成本有多高?
- 在c#中检查字符串是否只包含数字的最快方法
- JavaScript变量声明在循环外还是循环内?
- 我能在服务器端应用程序(PHP、Ruby、Python等)上读取URL的哈希部分吗?
- 什么是http头“X-XSS-Protection”?
- 自动HTTPS连接/重定向使用node.js/express
- 在nodejs http中body在哪里。得到回应?
- 为什么C语言这么快,为什么其他语言没有这么快或更快?
- String与StringBuilder
- Ruby:如何将散列转换为HTTP参数?
- 在用nodejs和express创建的REST API中设置响应状态和JSON内容的正确方法
- 为什么引入无用的MOV指令会加速x86_64汇编中的紧循环?
- 如何在SQL中有效地计数列值的发生?
- 使用curl在PHP中获取HTTP代码