如何检查网站是否支持 HTTP/2协议

有很多关于 HTTP/2协议的主题,但我想知道是否有一个工作网站与此协议。

也就是说。

我们可以决定使用 http://https://,但是如何编写 HTTP/2请求呢?

我知道这个协议取决于服务器的性能,但我无法找到一种方法来检查一个网站,例如 google.com,是否启用了 HTTP/2支持。

HTTP/2 browser support

正如我在这张图片中看到的,所有现代浏览器都支持这种协议。 我还没有看到任何可能看起来像新一代协议的链接。

我们是在不知情的情况下使用 HTTP/2协议,还是只是一个童话故事?

113840 次浏览

打开浏览器开发工具并切换到网络选项卡。如果 HTTP/2可用,您将看到 H2

HTTP/2重用 HTTP://和 https://方案,而不是使用新的方案。

所有浏览器只支持 https://上的 HTTP/2,而 SSL/TLS 协商的一部分是通信双方是否支持 HTTP/2并愿意使用它(使用称为 ALPN 的 SSL/TLS 扩展)。

这样做的好处是你可以直接连接到一个网站,如果你的浏览器支持它,它会自动协商 HTTP/2,如果不支持,它会自动回到 HTTP/1.1。

所以为了测试对 HTTP/2的支持,你可以像 Markus 建议的那样使用浏览器(例如,确保在 Chrome 中将 Protocol 列添加到 Network 选项卡中)。

或者您可以使用像 https://tools.keycdn.com/http2-test这样的在线测试程序

或者可以使用命令行工具,如 openssl (假设它是使用 ALPN 支持构建的) : openssl s_client -alpn h2 -connect www.example.com:443 -status

大多数大型网站(如 Twitter、 Facebook、 Amazon、 Stack Overflow)现在都在使用 HTTP/2。

你可以检入: Chrome 开发工具(F12)→ 网络规定

它将告诉您所使用的协议和每次传输的域。

Chrome Dev Tool (F12) -> Network -> Protocol

传奇

HTTP/1.1 = HTTP/1.1
H2 = HTTP/2


注意: 如果您看不到 规定列,只需右键单击任何标题并检查 “协议”标签。

使用 F12在 Chrome 中打开 开发工具,然后转到 网络选项卡。

右键单击一行,选择 标题选项,然后从菜单中选择 规定

Enter image description here

你也可以使用一个很酷的 Chrome/Firefox 扩展 < a href = “ https://chrome.google.com/webstore/Details/http2-and-SPDY-ator/mpbpobfflnpcgagjijhmgnchggcjblin/related? hl = en”rel = “ nofollow noReferrer”> HTTP/2和 SPDY 指示器 来检查网站协议。

您可以使用 curl命令查找特定网站是否支持 HTTP/2协议。在下面的示例中,只需用要检查 HTTP/2支持的 URL 替换 https://www.cloudflare.com/:

% curl -vso /dev/null --http2 https://www.cloudflare.com/

如果在输出消息中看到 offering h2,这意味着给定的 URL 支持 HTTP/2。例如:

....
* ALPN, offering h2
* ALPN, offering http/1.1
....

使用 curl命令作为现有 curl 解决方案的解决方案对我不起作用。curl提供了一个交换机 --http2-prior-knowledge,它确保在不尝试 HTTP/1.1升级请求的情况下直接发送 HTTP/2请求。下面的例子可以帮助理解不同情况下的行为:

Curl to Google 支持 HTTP/2-自动选择 HTTP/2。

curl -Iks https://www.google.com/robots.txt


HTTP/2 200
accept-ranges: bytes
vary: Accept-Encoding
content-type: text/plain
content-length: 7199
cross-origin-resource-policy: cross-origin
date: Fri, 21 May 2021 13:39:02 GMT
expires: Fri, 21 May 2021 13:39:02 GMT
cache-control: private, max-age=0

卷曲到我的服务器,它不支持 HTTP/2-响应状态 HTTP/1.1

curl -Iks https://myserver/reset
HTTP/1.1 502 Bad Gateway
connection: close
content-length: 0

使用 --http2开关卷曲到我的服务器。响应仍然是 HTTP/1.1

curl -Iks --http2 https://myserver/reset
HTTP/1.1 502 Bad Gateway
connection: close
content-length: 0

使用 --http2-prior-knowledge卷曲到我的服务器。注意,没有得到任何响应。

curl -Iks --http2-prior-knowledge https://myserver/reset

如果使用 v开关(详细)执行以上操作,则输出将包括以下行。

* http2 error: Remote peer returned unexpected data while we expected SETTINGS frame.  Perhaps, peer does not support HTTP/2 properly.

注:

  • 交换机 k用于 insecure-我的服务器使用自签名证书。否则不需要。
  • 交换机 I是发送一个 HEAD请求,避免输出噪声。
  • 上图是在 Ubuntu 18.04上用 curl 7.58.0捕获的
curl -I --http2 -s https://domain.url/ | grep HTTP

这个问题已经被回答了,但我还是要回答这个问题。

访问 Chrome 的 Developer Tools,你可以通过以下方式打开开发工具:

  • 我在 Mac 上,所以我使用 something i (something + something + i)组合来打开 Chrome 浏览器上的开发工具。默认情况下,如果使用键盘组合,它会选择 Network选项卡。
  • 您也可以在键盘上使用 F12来做同样的事情。
  • 只需单击浏览器右上角显示的三个点(也称为省略号)即可打开 Developer Tools。点击 Three dots aka ellipsis -> More Tools -> Developer Tools

Name列中右键单击并确保选中了 Protocol。现在您可以看到 Protocol列,其中 h2指的是 HTTP/2h3指的是 HTTP/3,以防您看到它们,而 http/1.1指的是 HTTP/1.1

enter image description here

enter image description here

你可以通过以下方式查看 Protocol列:

  • 右键单击您在 Name列下看到的行,然后单击 Header Options并选中 Protocolenter image description here enter image description here

  • 你也可以免费从 给你检查,例如: 在那里键入 https://google.com或您的网站与 HTTPS 协议。

  • 还有一个 Chrome 浏览器扩展可以帮助你。参考链接是 给你

  • 您也可以使用 curl命令来检查。

  • 如果您喜欢 CLI,可以使用此命令

    curl -sI --http2 https://stackoverflow.com/ | grep -i "HTTP/2"