http和https在性能上有什么主要的区别吗?我似乎记得读到过HTTPS的速度是HTTP的五分之一。这对当前的web服务器/浏览器有效吗?如果有,是否有相关白皮书支持?
当前回答
对此有一个非常简单的答案:分析您的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.
其他回答
除了到目前为止提到的所有内容,请记住,出于安全原因,一些(所有?)web浏览器不会将通过HTTPS获得的缓存内容存储在本地硬盘上。这意味着,从用户的角度看,在浏览器重启后,含有大量静态内容的页面加载速度会变慢,而从服务器的角度看,通过HTTPS请求静态内容的量将比通过HTTP请求的量要高。
因为我正在为我的项目调查同样的问题,我发现了这些幻灯片。年长但有趣:
http://www.cs.nyu.edu/artg/research/comparison/comparison_slides/sld001.htm
要真正理解HTTPS如何增加延迟,您必须了解HTTPS连接是如何建立的。这是一个很好的图表。关键在于,客户端不是在2个“腿”(一个往返,你发送一个请求,服务器发送一个响应)后才获得数据,而是至少要到4个“腿”(2个往返)后才能获得数据。因此,如果一个数据包在客户端和服务器之间移动需要100毫秒,那么您的第一个HTTPS请求至少需要500毫秒。
当然,这可以通过重新使用HTTPS连接来缓解(浏览器应该这样做),但它确实解释了加载HTTPS网站时的部分初始停滞。
考虑到SSL需要一个非sll HTTP不需要的额外加密步骤,这几乎肯定是正确的。
Browsers can accept HTTP/1.1 protocol with either HTTP or HTTPS, yet browsers can only handle HTTP/2.0 protocol with HTTPS. The protocol differences from HTTP/1.1 to HTTP/2.0 make HTTP/2.0, on average, 4-5 times faster than HTTP/1.1. Also, of sites that implement HTTPS, most do so over the HTTP/2.0 protocol. Therefore, HTTPS is almost always going to be faster than HTTP simply due to the different protocol it generally uses. However, if HTTP over HTTP/1.1 is compared with HTTPS over HTTP/1.1, then HTTP is slightly faster, on average, than HTTPS.
以下是我使用Chrome(版本64)运行的一些比较:
HTTPS over HTTP/1.1:
0.47秒的平均页面加载时间 在HTTP/1.1上比HTTP慢0.05秒 比HTTP/2.0上的HTTPS慢0.37秒
HTTP over HTTP/1.1
0.42秒的平均页面加载时间 比HTTP/1.1上的HTTPS快0.05秒 比HTTP/2.0上的HTTPS慢0.32秒
HTTPS over HTTP/2.0
平均加载时间0.10秒 在HTTP/1.1上比HTTP快0.32秒 比HTTPS/1.1快0.37秒
推荐文章
- 确定记录是否存在的最快方法
- 在Cygwin中对HTTPS URL运行wget时,如何修复证书错误?
- 阅读GHC核心
- Python: List vs Dict用于查找表
- 为什么MATLAB的矩阵乘法运算这么快?
- for循环和for-each循环在性能上有区别吗?
- 就性能而言,使用std::memcpy()还是std::copy()更好?
- 什么时候我应该(不)想要在我的代码中使用熊猫apply() ?
- 如何加速gwt编译器?
- MySQL OR与IN性能
- 应该……接住环内还是环外?
- 哪个更快/最好?SELECT *或SELECT columnn1, colum2, column3等
- 什么是HTTP“主机”报头?
- 加快R中的循环操作
- INT和VARCHAR主键之间有真正的性能差异吗?