我如何知道我的网站是通过HTTP还是HTTP/2提供服务?

我如何知道我的网站是通过HTTP还是HTTP/2提供服务?,http,http2,Http,Http2,有没有命令或服务可以告诉我我的网站是通过HTTP还是HTTP/2提供服务的 我找到了这个工具:,但它只告诉我我的网站是否支持HTTP/2,而不是它是否已经在使用HTTP/2 这也是Chrome的扩展:,它告诉我我的站点上已经启用了HTTP/2,但据我所知,我的Apache版本甚至不支持它 有没有办法确定呢?谢谢 Apache不必支持它。Chrome扩展读取HTTP头来确定 另一种方法是查看Chrome或Firefox中的网络选项卡>标题>响应标题>查看源代码。在那里可以看到标题。它应该是“HTT

有没有命令或服务可以告诉我我的网站是通过HTTP还是HTTP/2提供服务的

我找到了这个工具:,但它只告诉我我的网站是否支持HTTP/2,而不是它是否已经在使用HTTP/2

这也是Chrome的扩展:,它告诉我我的站点上已经启用了HTTP/2,但据我所知,我的Apache版本甚至不支持它


有没有办法确定呢?谢谢

Apache不必支持它。Chrome扩展读取HTTP头来确定

另一种方法是查看Chrome或Firefox中的网络选项卡>标题>响应标题>查看源代码。在那里可以看到标题。它应该是“HTTP/2”或者我现在想不起来的那种

最简单:您可以使用
curl-I
,它将HTTP响应作为第一行

HTTP/2.0 200
server:nginx
date:Fri, 29 Apr 2016 14:31:40 GMT
content-type:text/html; charset=utf-8
content-length:7629
last-modified:Thu, 07 Apr 2016 02:41:08 GMT
....

对于使用Nginx的用户,您可以查看访问日志,该日志通常位于
/var/log/Nginx/access.log
,并查找以下行

167.220.232.9 - - [12/Feb/2018:15:09:04 +0800] "GET / HTTP/2.0" 200 2546 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299"
您还可以尝试使用
--http2
--http2先验知识
。这将迫使webiste使用HTTP/2.0:

从curl手册:

--http2-prior-knowledge
              (HTTP) Tells curl to issue its non-TLS HTTP requests using HTTP/2 without HTTP/1.1 Upgrade.  It  requires
              prior  knowledge  that  the server supports HTTP/2 straight away. HTTPS requests will still do HTTP/2 the
              standard way with negotiated protocol version in the TLS handshake.

              --http2-prior-knowledge requires that the underlying libcurl was built to  support  HTTP/2.  This  option
              overrides --http1.1 and -0, --http1.0 and --http2. Added in 7.49.0.

--http2
              (HTTP) Tells curl to use HTTP version 2.

              See also --no-alpn. --http2 requires that the underlying libcurl was built to support HTTP/2. This option
              overrides --http1.1 and -0, --http1.0 and --http2-prior-knowledge. Added in 7.33.0.

如果您没有现成的命令行和cURL访问权限,或者您正在浏览多个CDN层(例如,如果您的HTTP/2是由CloudFlare之类的提供商提供的),那么这里有另一种方法可能更简单

  • 打开Chrome开发工具(Ctrl-Shift-I)
  • 打开“网络”选项卡
  • 如果页面已加载,则可能需要刷新(Ctrl-R)
  • 右键单击请求列表的标题行(标记为:名称、方法、状态等的行)
  • 从关联菜单中选择协议
  • 您可能需要再次刷新(Ctrl-R),您将看到正在使用的所有协议


    如果您看到
    h2
    ,那么恭喜您!您的网站正在通过HTTP/2提供服务。

    mod_http2
    在Apache的2.4.17版和更高版本中提供。您必须使用最新的OpenSSL 1.0.2(最好是最新的OpenSSL 1.0.2h,很快就是1.1.0)。你将了解更多细节。为什么将web服务器更新到最新的2.4.20版本时会出现问题?您认为您的软件会出现一些兼容性问题吗?您可以使用IE开发者工具或Chrome开发者工具(只需使“协议”列可见),清除缓存(重要!!!)并在网络跟踪中查看HTTP2或h2。你可以先在cdnjs上测试一下。谢谢,@Oleg。我已经研究了
    mod_http2
    ,我想安装它,但我运行CentOS,其最新的Apache预打包版本是2.4.6(正如您所说,它不支持
    mod_http2
    )。我认为升级到2.4.17的唯一方法是从头编译Apache,但我不确定是否要这样做。我可能不得不等到CentOS发布更新。不客气!我不使用CentOS,但似乎应该真正编译源代码:请参阅。可能很容易。我没有经验。无论如何,HTTP/2将使您的站点速度提高30%左右。此外,您将能够在不合并的情况下使用JavaScript模块,因为在HTTP/2下加载许多小文件非常快。您可以将web服务器配置为加载具有1年缓存的最小文件(jQuery等)。用户通常只加载一次此类文件。“我的意思是HTTP/2是一个非常重要的功能,我向你推荐它,我完全同意,”奥列格说。我对HTTP/2也非常兴奋,迫不及待地想开始使用它。从我在网上看到的情况来看,它似乎比它的前身有了实质性的改进。谢谢你的链接!也许我可以使用链接中的说明成功编译较新的Apache。:)下面是我关于如何在centos上从源代码安装的帖子:如果您感兴趣的话。Curl确实显示了http/2头,但chrome webtools没有。实际上,chrome webtools可以显示它,但默认情况下它是隐藏的。请参阅我的答案,了解如何启用它。最初我不了解详细信息,后来只了解需要选择“全部”(在隐藏数据URL旁边,上图)