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

How to check if a website has HTTP/2 protocol support

有很多关于HTTP/2协议的话题,但我想知道是否有使用该协议的网站。

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

我知道此协议取决于服务器功能,但我找不到检查网站(例如google.com,已启用 HTTP/2 支持。

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

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

打开浏览器开发工具,切换到网络标签。如果 HTTP/2 可用,您会在那里看到 h2

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

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

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

因此,要测试 HTTP/2 支持,您可以按照 Markus 的建议使用浏览器(例如,确保将协议列添加到 Chrome 中的网络选项卡)。

或者您可以使用 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) → 网络协议.

它会告诉你使用的协议和每次传输的域。

图例

http/1.1 = HTTP/1.1
h2 = HTTP/2


注意: 如果您看不到 Protocol 列,只需 right-click 任何 header 并检查“协议” 标签。

使用 F12 在 Chrome 中打开 Dev Tools。然后转到 网络 选项卡。

右击一行,selectHeader选项,然后select协议 从菜单中。

您还可以使用名为 HTTP/2 and SPDY indicator 的很酷的 Chrome/Firefox 扩展来检查网站协议。

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

% 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/2 请求而不尝试 HTTP/1.1 升级请求。下面的示例可以帮助理解不同情况下的行为:

卷曲到支持 HTTP/2 的 Google - 自动选择 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

Curl 到我的服务器,它不支持 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 所以我使用 ⌥⌘i (⌥+⌘+i) 组合在 Chrome 浏览器上打开开发工具。如果您使用键盘组合,它会默认 select Network 选项卡。
  • 您也可以使用键盘上的 F12 来执行相同的操作。
  • 您只需单击浏览器右上角显示的三个点(也称为省略号)即可打开开发人员工具。点击 Three dots aka ellipsis -> More Tools -> Developer Tools

Name 列中 right-click 并确保选中 Protocol。现在您可以看到 Protocol 列,其中 h2 指的是 HTTP/2h3 指的是 HTTP/3,如果您看到它们,http/1.1 指的是HTTP/1.1.

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

  • Right-click 您在 Name 列下看到的行,然后单击 Header Options 并选中 Protocol

  • 您也可以从here免费查看。一个例子在这里: 在此处输入 https://google.com 或使用 HTTPS 协议的站点。

  • 还有一个 chrome 浏览器扩展程序可以帮助您。 ref link 是 here.

  • 也可以使用curl命令查看。 线程对此有一个可接受的答案。

  • 喜欢CLI的可以使用这个命令

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