【发布时间】:2016-02-13 00:02:28
【问题描述】:
我正在评估我可以从 HTTP2 为我的网站获得的性能和奇怪的结果 - 欧洲的网站是从美国加载的:
- 使用 HTTP/2 - 6-7 秒
- 使用纯 HTTPS - 5-6 秒(大约快 1 秒)
我从 Chrome 的网络监视器中截取了屏幕截图,看起来使用 HTTP/2 时,大部分资源都是一个接一个地加载,而不是像普通 SSL 那样并行加载。
为了进行测试,我使用 Apache 2.4.17 (Win32) 涵盖的 Web 应用程序作为代理(以应用对 SSL 和 HTTP/2 协议的支持)。客户端浏览器是 Windows 7 上的 Chrome 46.0.2490.86。
捕获的网络请求如下。简短的摘要: 1.第一个——是HTML页面 2. 下一组 - 6 个请求 - 直接在 HTML 中声明的资源 3. 剩下的——通过脚本动态添加的资源(document/head 中的'script' 和'link/css' 标签)。
图片左边是HTTP/2, 右侧 - 通过普通 SSL 的相同员工(http2_module 已关闭)。
更新:我已经测试了支持 HTTP/2 作为反向代理的“其他东西”。它是来自http://nginx-win.ecsds.eu 的 nginx 1.9.7.1 Kitty - 原始 nginx 'for windows' 的分支。原始 nginx 中的 HTTP/2 仅在 in commercial version 可用,因此我无法尝试。而且看起来没有其他服务器实现 HTTP/2 + 反向代理 for windows,或者我找不到它们(列表 here 和 here)。
我从 Kitty 得到的结果更具误导性 - 没有像 Apache 那样的“顺序加载”资源,但是 HTTP/2 的传输速率比普通 SSL 慢两倍。最终结果是 - HTTP/2 比普通 SSL 慢得多。下面是所有这些并排的。
在所有这一切中,我只能假设性能在很大程度上取决于实现,而当前可用的实现表现得很奇怪,以得出关于 HTTP/2 的任何一致结论。
【问题讨论】:
-
响应标头说什么?您确定 Apache 已正确配置以发送 HTTP/2 吗?仅供参考,某些浏览器可能无法正确显示版本,请查看icing.github.io/mod_h2/howto.html。
-
Chrome 显示的响应标头对我没有任何用处 :(。我很确定 HTTP/2 真的“开启”,因为这个插件 (chrome.google.com/webstore/detail/http2-and-spdy-indicator/…) 显示了 HTTP/2 图标和网络行为与普通 SSL 不同 - 仅执行一次 SSL 握手。
-
@XtraCoder 只需右键单击 devtools 网络面板的标题,与您所附的图中相同,然后查找“协议”列。但是从图中可以看出前半部分是使用HTTP/2还是SPDY。
-
'Protocol' 列说它是
h2,在单独的选项卡中打开chrome://net-internals/#http2的页面,同时在另一个选项卡中加载站点显示我的站点Protocol Negotiated=h1和'加载时活动流最多可达 5 个。 -
...抱歉,在我的评论中看到错字 - 正确的措辞是 'for my site
Protocol Negotiated=h2'
标签: performance http2