我如何知道我的网站是通过 HTTP 还是 HTTP/2 提供的?
Posted
技术标签:
【中文标题】我如何知道我的网站是通过 HTTP 还是 HTTP/2 提供的?【英文标题】:How do I know if my website is being served over HTTP or HTTP/2? 【发布时间】:2016-08-24 18:05:32 【问题描述】:是否有命令或服务可以告诉我我的网站是通过 HTTP 还是 HTTP/2 提供服务。
我找到了这个工具:HTTP/2 Test | A simple HTTP/2.0 test tool,但它只告诉我我的网站是否支持 HTTP/2,而不是它是否已经在使用 HTTP/2。
这也是这个 Chrome 扩展程序:HTTP/2 and SPDY indicator,它告诉我 HTTP/2 已经在我的网站上启用,但据我所知,我的 Apache 版本甚至不支持它。
有什么方法可以确定吗?谢谢!
【问题讨论】:
mod_http2
在 Apache 2.4.17 及更高版本中可用。您必须使用最新的 OpenSSL 1.0.2(更好的是最新的 OpenSSL 1.0.2h 和很快的 1.1.0)。您将获得更多详细信息here。为什么您看到将 Web 服务器更新到最新的 2.4.20 版本时出现问题?您预计您的软件会出现一些兼容性问题吗?您可以使用 IE 开发人员工具或 Chrome 开发人员工具(只需使“协议”列可见),清除缓存(重要!!!)并在网络跟踪中查看 HTTP2 或 h2。你可以先在 cdnjs.com 上测试一下
谢谢,@Oleg。我查看了mod_http2
,我想安装它,但我运行的是CentOS,它最新的Apache 预打包版本是2.4.6(就像你说的,它不支持mod_http2
)。我认为升级到 2.4.17 的唯一方法是从头开始编译 Apache,但我不确定是否要这样做。我可能只需要等到 CentOS 推出更新。
不客气!我不使用 CentOS,但似乎应该真正编译源代码:参见here。大概这很容易。我没有经验。无论如何,HTTP/2 将使您的网站加速大约 30%。此外,您将能够在不合并的情况下使用 javascript 模块,因为在 HTTP/2 下加载许多小文件非常快。您可以配置 Web 服务器以加载具有 1 年缓存的最小文件(jQuery 等)。用户通常只会加载一次此类文件。我的意思是 HTTP/2 是我向您推荐的非常重要的功能
我完全同意,@Oleg。我也对 HTTP/2 感到非常兴奋,迫不及待地想要开始使用它。从我在网上阅读的内容来看,它似乎比其前身有了实质性的改进。感谢您的链接!也许我会使用链接中的说明成功编译较新的 Apache。 :)
这是我关于如何在 centos 上从源代码安装的帖子:tunetheweb.com/performance/http2 如果您有兴趣。
【参考方案1】:
Apache 不必支持它。 Chrome 扩展程序会读取 HTTP 标头来确定这一点。
另一种方法是在 Chrome 或 Firefox 中查看网络选项卡 > 标头 > 响应标头 > 查看源代码。在那里可以看到标题。它应该是“HTTP/2”或某种我现在想不起来的东西。
最简单:您可以使用curl -I <your site>
,它将 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
....
【讨论】:
Curl 确实显示了 http/2 标头,但 chrome webtools 没有。 其实Chrome Webtools可以显示,但是默认是隐藏的。请参阅我的答案以了解如何启用它。【参考方案2】:如果您没有准备好访问命令行和 cURL 的权限,或者您正在导航多层 CDN(例如,如果您的 HTTP/2 由 CloudFlare 之类的提供商提供,那么这是另一种可能更简单的方法)。
-
打开 Chrome 开发工具 (Ctrl-Shift-I)
打开网络标签
如果您的页面已经加载,您可能需要刷新 (Ctrl-R)
右键单击请求列表的标题行(标记为:名称、方法、状态等的行)
从上下文菜单中选择协议。
您可能需要再次刷新 (Ctrl-R),您将看到所有正在使用的协议。
如果你看到h2
,那么恭喜你!您的网站正在通过 HTTP/2 提供服务。
【讨论】:
一开始没有详细了解,后来才明白,'All'需要选择(与Hide Data URLs相邻,上图)【参考方案3】:对于使用 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"
【讨论】:
【参考方案4】:您也可以尝试--http2
或--http2-prior-knowledge
。这些将迫使网站使用 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.
【讨论】:
以上是关于我如何知道我的网站是通过 HTTP 还是 HTTP/2 提供的?的主要内容,如果未能解决你的问题,请参考以下文章