如何检测访问者使用的是 HTTP/2 还是 SPDY?

Posted

技术标签:

【中文标题】如何检测访问者使用的是 HTTP/2 还是 SPDY?【英文标题】:How to detect if the visitor is using HTTP/2 or SPDY? 【发布时间】:2015-08-09 07:30:11 【问题描述】:

我正在寻找可以检测访问者的浏览器是否启用了 SPDY 或 HTTP/2 的脚本。

类似this。

【问题讨论】:

【参考方案1】:

理论上,一旦nextHopProtocol 登陆ResourceTiming 和NavigationTiming,您应该能够检测到h2 对根页面和其他资源的支持。

截至 2016 年 6 月 6 日,nextHopProtocol 仅在 Firefox 的 ResourceTiming 实现中可用。它在它们的 NavigationTiming 中不可用,或者在 Chrome、FF 和 Safari 的 NavigationTiming 或 ResourceTiming 中不可用。

因此对于今天的 Firefox 访问者,您可以查看与 html 页面位于同一域中的其他资源的 nextHopProtocol 是否为 h2,并推断 HTML 页面也是 h2

【讨论】:

Chrome 在 2018 年也有这个功能。 Chrome 于 2018 年 7 月拥有它:performance.getEntriesByType('navigation')[0].nextHopProtocol【参考方案2】:

我没有找到一个简单的测试。我认为解决方法是编写自己的测试:) 您可以获取支持 HTTP/2 的浏览器列表(可以在 caniuse.com 上找到)然后循环浏览支持的浏览器列表,如果当前为您服务的浏览器在列表中,那么您就可以开始了。

【讨论】:

【参考方案3】:

现在是 2018 年 7 月,我看到 Firefox 和 Chrome 都通过 Navigation Timing 2 API 暴露了这一点:

performance.getEntriesByType('navigation')[0].nextHopProtocol

话虽如此,Navigation Timing Level 2 API 目前处于工作草案状态,因此对 nextHopProtocol(与 Level 2 API 一起引入)的支持将受到限制(不确定支持它的确切浏览器,因为 caniuse 目前不包括导航计时级别 2 API)。

【讨论】:

以上是关于如何检测访问者使用的是 HTTP/2 还是 SPDY?的主要内容,如果未能解决你的问题,请参考以下文章

SPD

目标检测算法——YOLOv5/YOLOv7改进之结合SPD-Conv(低分辨率图像和小目标涨点明显)

SPD各模块总结

如何检测 Linux 操作系统是使用 KDE 还是 Gnome 环境

传奇人物属性解释

如何在 C# 中检测 Windows 是通过 LAN 还是通过 WiFi 引导流量