检测浏览器中的HTTP2/SPDY支持

3

在浏览器内部能否检测浏览器对HTTP2/SPDY客户端的支持?

我正在尝试向用户展示他们的浏览器是否支持HTTP2/SPDY,或者使用传统的非HTTP2/SPDY HTTPS协议。


客户端方面几乎总是指浏览器中的JavaScript,对吗? - Jonathon Reinhart
2个回答

2

谢谢,Patrick。我采纳了你的建议,利用nginx的$http2变量,并使用PHP返回动态JS变量来检测浏览器。(如果其他读者喜欢的话,传递cookie或添加响应头进行AJAX检测也是可选项)。

NGINX配置增加内容

server {
    ...

    if ($http2) { 
        rewrite ^/detect-http2.js /detect-http2.js.php?http2=$http2 last;
    }
    # fallback to non-HTTP2 rewrite
    rewrite ^/detect-http2.js /detect-http2.js.php last;

    # add response header if needed in the future
    add_header x-http2 $http2;
}

detect-http2.js.php

<?
    header('content-type: application/javascript');
    if (isset($_REQUEST['http2'])) {
        echo "var h2Version='". $_REQUEST['http2'] . "';\n";
    }
?>

detect-http2.html

<html>
    <body>
        <script src="https://DOMAIN_NAME/detect-http2.js"></script>
        <script>
            document.write('HTTP2-Supported Browser: '+ (typeof h2Version !== 'undefined'));
        </script>
    </body>
</html>

2
不,其实并没有。至少没有一种有意义或可操作的方式。
前端JavaScript会在服务器已经提供所有资产之后运行。你想做的一切都将在服务器端完成。SPDY兼容的浏览器应该会自动与SPDY服务器协商。
你需要做的就是配置它(nginxapache)。您还可以发送Alternate-Protocol头以响应https请求。这将使浏览器在可能的情况下在未来响应SPDY请求(我在更新的SPDY规范中找不到这个信息,所以可能是过时的信息。请谨慎考虑)。
如果你想知道一个网站是否使用了SPDY协议,在Chrome中可以使用chrome.loadTimes().wasFetchedViaSpdy(显然只适用于Chrome)。对于Firefox和Safari,你需要检查头部信息(据我所知没有类似的API,但是有一些插件可以帮助你完成这个任务)。SPDYCheck是另一个很好的资源,可以测试服务器是否已经正确设置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接