【问题标题】:How can I check that HTTP2/Server Push works properly?如何检查 HTTP2/Server Push 是否正常工作?
【发布时间】:2020-04-23 01:17:25
【问题描述】:

我一直在本地测试 Node.js 中的 HTTP2 多路复用和 HTTP2/服务器推送,并在 Chrome 开发工具的瀑布网络图中对其进行了检查。 在使用我自己的带有res.stream.pushStream 的 Node.js 服务器推送时,我在 DevTools 中得到了一个“Initiator: Push (index)”,如下所示:

变化如下:


我做了更多研究,并认为我应该使用反向代理来完成这项工作(例如 Nginx)并通过 HTTP1.1 连接到我的 Node.js,而不是作为上游和服务来自我的反向代理的 HTTP2。 在使用http2_push_preload on; 设置nginx.conf 后,我从我的Node.js 后端发送了一些类似这样的标头:

res.setHeader("Link","</picture.jpg>; as=image; rel=preload");

令我惊讶的是,我没有看到“Push / (index)”指示器,而是像下面的屏幕截图和 @ 中列出的资产那样的“Other”与其他资产相比,987654329@ 标头似乎更快地出现在瀑布图上,TTFB 时间略短。

我也一直在寻找一种解决方案,将 HTTP/2 作为反向代理提供服务,并通过 HTTP/2 直接从服务下载资产,无需 TLS (HTC),但似乎没有这样的事情。

回到我的问题:我应该如何测试 HTTP/2 服务器推送? “Initiator: Other”是来自开发工具的误解吗?它似乎正在工作,但它没有报告为服务器推送。

另外,是否有任何项目/解决方案可以直接通过 HTTP2 连接到上游后端?

我很确定后一张图片显示访问速度较慢,因为使用反向代理而不是直接连接到服务器的开销,并且目标服务器上的 HTTP1.1 使用放大了它。

【问题讨论】:

  • 那行不通。您可以看到白色然后是绿色的请求时间以及蓝色的下载时间。使用推送,您应该只会看到蓝色的下载时间。似乎 Nginx 无法识别推送指令,而 Chrome 正在预加载此资源。你用的是什么版本的nginx?您是使用 HTTPS 的自签名证书还是公认的证书(您有红色划线的挂锁)?
  • 这是一个自签名证书,所以它是一个红色锁,我目前在 nginx 1.16.0 上(http2 push 应该从 1.13.9 开始工作)
  • HTTP/2 推送不适用于 Chrome 中的红色挂锁。您需要接受证书到您的信任存储或使用由公认的证书颁发机构颁发的证书,然后它应该可以工作。我认为您的节​​点证书不同?
  • 其实是同一个证书,所以应该不是吧
  • 好的,我再次重新加载了整个系统(没有任何调整,只是硬重置)并且它赶上了并且似乎现在可以与 Push / Other 一起使用。我将进行更多调试并尝试确定是否可以重现该错误。感谢您的关注

标签: node.js http2 server-push


【解决方案1】:

感谢@Barry 我发现它实际上是 Chrome 本身作为“Other”的发起者,它确实通过使用 Resource Hints 加快了进程@ 987654322@ 标头而不是 HTTP/2 服务器推送 本身。 这个问题实际上是一个我似乎无法重现的错误,并且在重新启动操作系统后它运行良好。毕竟 Nginx 是没有正确使用 headers 的罪魁祸首,当在 Chrome 中解析时就会出现。

【讨论】:

    猜你喜欢
    • 2013-08-10
    • 2015-07-25
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 2012-07-24
    • 2011-01-28
    相关资源
    最近更新 更多