Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 为什么HTTP/2比普通HTTPS慢?_Performance_Http2 - Fatal编程技术网

Performance 为什么HTTP/2比普通HTTPS慢?

Performance 为什么HTTP/2比普通HTTPS慢?,performance,http2,Performance,Http2,我正在评估我的网站在性能方面可以从HTTP2获得什么,并得到奇怪的结果-欧洲的网站是从我们这里加载的: 使用HTTP/2-只需6-7秒 使用纯HTTPS-只需5-6秒(大约快1秒) 我从Chrome的网络监视器中截取了一些屏幕截图,看起来在HTTP/2中,大多数资源是一个接一个地加载的,而不是像普通SSL那样并行加载的 为了进行测试,我使用Apache2.4.17(Win32)覆盖的web应用程序作为代理(应用对SSL和HTTP/2协议的支持)。Windows 7上的客户端浏览器是Chrom

我正在评估我的网站在性能方面可以从HTTP2获得什么,并得到奇怪的结果-欧洲的网站是从我们这里加载的:

  • 使用HTTP/2-只需6-7秒
  • 使用纯HTTPS-只需5-6秒(大约快1秒)
我从Chrome的网络监视器中截取了一些屏幕截图,看起来在HTTP/2中,大多数资源是一个接一个地加载的,而不是像普通SSL那样并行加载的

为了进行测试,我使用Apache2.4.17(Win32)覆盖的web应用程序作为代理(应用对SSL和HTTP/2协议的支持)。Windows 7上的客户端浏览器是Chrome 46.0.2490.86

捕获的网络请求如下所示。小结: 1.第一个是HTML页面 2.下一组-6请求-直接以HTML声明的资源 3.rest—通过脚本动态添加的资源(文档/head中的“script”和“link/css”标记)

图片左侧是HTTP/2, 右侧-同一员工通过普通SSL(http2_模块已关闭)


更新:我已经测试了支持HTTP/2作为反向代理的“其他东西”。它是nginx 1.9.7.1 Kitty,源于原nginx“for windows”的-fork。原始nginx中的HTTP/2仅可用,因此我无法尝试。而且似乎没有其他适用于windows的HTTP/2+反向代理服务器实现,或者我就是找不到它们(列表和)

Kitty的结果甚至更具误导性——没有像Apache中那样的“顺序加载”资源,但是HTTP/2上的传输速率比普通SSL慢两倍。最终的结果是-HTTP/2比普通SSL慢得多。下面是它们并排排列的

除此之外,我只能假设性能在很大程度上取决于实现,而当前可用的实现执行起来很奇怪,因此无法对HTTP/2做出一致的结论


所以,最后我的决定是——HTTP/2本身没有问题,当前可用的实现有问题

  • ApacheHttpD2.4.17/Win32——有一些奇怪的“顺序加载”效果
  • nginx Kitty-提供异常缓慢的传输速率
  • 官方免费软件nginx没有内置http2模块
但是

  • 用于windows的自定义nginx,从
  • ApacheHTTPD2.4.17/linux
两者都显示出预期的性能。这是在“问题”中执行的相同测试的屏幕截图,但是在另一个人的linux计算机上托管了Apache反向代理


看看这个,它是从淘宝网开发的nginx的一个修改版本,AliExpress和许多其他繁忙网站都使用它。它支持HTTP2开箱即用,还支持一些仅在商用nginx中可用的其他功能,如上游控制


我们正在使用http/2运行最新的nginx

nginx version: nginx/1.9.10
built with OpenSSL 1.0.2e 3 Dec 2015
TLS SNI support enabled
我们做了同样的观察。我们正在记录$request\u time和$upstream\u time。尽管无论协议如何,上游_时间都相等,但总体请求_时间不同:

# grep ' 443 ' access.log|grep 'HTTP/1.1'| cut -d ' ' -f 3,4 | awk '{r+=$1; u+=$2} END {print r/NR; print u/NR}'
0.0116887   # HTTP/1.1 request_time in seconds
0.00673473  # HTTP/1.1 upstream_time in seconds

# grep ' 443 ' access.log|grep 'HTTP/2.0'| cut -d ' ' -f 3,4 | awk '{r+=$1; u+=$2} END {print r/NR; print u/NR}'
0.0363673   # HTTP/2.0 request_time in seconds
0.00695812  # HTTP/2.0 upstream_time in seconds
因此,http/1.1的总请求时间是原来的三倍!可能由于流的原因,请求时间记录和http/2不能正常工作。我真的不知道,但承诺是,如果http/2都在TLS上运行,那么http/2比http/1.1更快


但我将对此进行进一步调查

响应标题是怎么说的?您是否绝对确定Apache已正确配置为发送HTTP/2?仅供参考,有些浏览器可能无法正确显示版本,请看。Chrome显示的响应标题对我来说没有任何用处:(.我非常确定HTTP/2真的是“开启”的,因为这个插件()显示HTTP/2图标,网络行为与普通SSL不同-只执行一次SSL握手。@XtraCoder只需右键单击devtools网络面板的标题,与所附的图中相同,然后查找“协议”但从图中可以明显看出,上半部分使用的是HTTP/2或SPDY。“协议”列说它是
h2
,第页
chrome://net-internals/#http2
在单独的选项卡中打开,同时在另一个选项卡中加载站点,显示我的站点的协议协商=
h1
和“活动流”的数量'加载时上升到5。…抱歉,请参阅我的评论中的打字错误-正确的措辞是'for my site
Protocol Agreemented=h2
'很好!感谢您提供此信息。应该尝试一下!