如何检查 HTTP2/Server Push 是否正常工作?

How can I check that HTTP2/Server Push works properly?

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

变化很明显,如下所示:


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

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

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

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

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

此外,是否有任何 projects/solutions 可以直接通过 HTTP2 连接到后端上游?

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

感谢 @Barry 我发现它实际上是 Chrome 本身作为“Other” 发起者并且它确实通过使用加快了这个过程资源提示 Link header 而不是 HTTP/2 服务器推送 本身。 这个问题实际上是一个我似乎无法重现的错误,并且在 OS 重新启动后它运行良好。毕竟 Nginx 是没有正确使用 header 的罪魁祸首,它在 Chrome.

中解析时被踢了进来