如何检查网站是否具有http / 2协议支持

Ste*_*sic 10 protocols browser-support http2

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

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

我知道该协议取决于服务器的功能,但是找不到一种方法来检查某些网站(例如支持)是否google.comhttp2启用。

HTTP / 2浏览器支持

如图所示,所有现代浏览器都支持此协议。
我还没有看到任何看起来像新一代协议的链接。

我的问题是:我们是在不知道的情况下使用http / 2协议还是仅仅是童话?

blu*_*ray 51

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

% curl -vso /dev/null --http2 https://www.cloudflare.com/
Run Code Online (Sandbox Code Playgroud)

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

....
* ALPN, offering h2
* ALPN, offering http/1.1
....
Run Code Online (Sandbox Code Playgroud)

  • 在我的终端上,线路在大量未知 TLS 中丢失。`curl -vso /dev/null --http2 https://www.cloudflare.com/ 2>&1| grep "提供 h2"` (2认同)

Jua*_*dez 20

您可以仅在以下位置对其进行检查:Chrome开发工具(F12) > 网络 > 协议

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

Chrome开发者工具(F12)>网络>协议

传说

http / 1.1 = http 1.1
h2          = http 2.0


注意:如果看不到“ 协议”列,请右键单击任何标题,然后检查“协议”标签。

  • 我必须右键单击标题,然后将“协议”添加为可见的标题。直到有更多列可以在Chrome开发工具>网络中添加。 (2认同)
  • 必须右键单击“名称”标题,其他列无法右键单击。 (2认同)

liv*_*ove 17

开放式开发工具在Chrome中使用F12。然后转到“网络”选项卡。

右键单击一行,选择Header Options,然后从菜单中选择Protocol

在此处输入图片说明

  • @oᴉɹǝɥɔ [HTTP/3](https://en.wikipedia.org/wiki/HTTP/3) (2认同)

bho*_*pur 16

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

\n

转到 Chrome 的Developer Tools. 您可以通过多种方式打开开发人员工具,例如:

\n
    \n
  • 我使用的是 Mac,所以我使用 \xe2\x8c\xa5\xe2\x8c\x98i (\xe2\x8c\xa5+\xe2\x8c\x98+i) 组合在 Chrome 浏览器上打开开发工具。Network如果您使用键盘组合,它会默认选择该选项卡。
  • \n
  • F12您可以在键盘上使用替代方法来执行相同的操作。
  • \n
  • 您只需单击浏览器右上角显示的三个点(也称为省略号)即可打开开发人员工具。点击Three dots aka ellipsis -> More Tools -> Developer Tools
  • \n
\n

在该Name列中右键单击并确保Protocol选中。现在,您可以看到“ Protocolwhereh2引用”HTTP/2h3“引用”列HTTP/3,以防您看到它们和http/1.1“引用” HTTP/1.1

\n

在此输入图像描述

\n

在此输入图像描述

\n

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

\n
    \n
  • 右键单击您在Name列下看到的行,然后单击Header Options并选中Protocol。\n在此输入图像描述\n在此输入图像描述

    \n
  • \n
  • 您也可以从这里免费查看。示例如下:\n在其中输入https://google.com或使用 HTTPS 协议的网站。

    \n
  • \n
  • 还有一个 Chrome 浏览器扩展可以帮助您。参考链接在这里

    \n
  • \n
  • 也可以使用curl命令来检查。线程对此有一个公认的答案。

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

    \n

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

    \n
  • \n
\n


Bar*_*ard 11

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

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

这样做的好处是您可以仅连接到一个网站,并且如果您的浏览器支持它,它将自动协商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。

  • 与其说它是从 HTTP/2 开始,然后切换回来。发生的情况是浏览器打开 HTTPS 连接并说“我支持此版本的 TLS、这些密码和 HTTP/2 - 让我知道其中哪一个适合您”,然后服务器决定使用它们的最佳设置理解。如果浏览器表示它支持 HTTP/2 并且服务器也支持,那么它将使用它。如果浏览器没有表示支持,但服务器支持,那么它将使用 HTTP/1.1。如果浏览器说它支持它,而服务器会问“你说的 HTTP/2 是什么?” 然后它会忽略它并使用 HTTP/1.1。 (2认同)
  • 我自己不要使用 Tomcat,并且快速 Google 后的文档对此并不十分清楚,但如果添加 HTTP/2 支持禁用了 HTTP/1.1 支持,我会感到非常惊讶。 (2认同)

Mar*_*sch 6

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

  • 我三分钟没找到,你能分享一下截图吗? (2认同)

Pav*_*mar 6

使用curl命令作为现有的curl 解决方案的解决方案对我来说效果不佳。curl提供一个开关--http2-prior-knowledge,确保发送直接 HTTP/2 请求,而无需尝试 HTTP/1.1 升级请求。以下示例可以帮助理解不同情况下的行为:

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
Run Code Online (Sandbox Code Playgroud)

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

curl -Iks https://myserver/reset
HTTP/1.1 502 Bad Gateway
connection: close
content-length: 0
Run Code Online (Sandbox Code Playgroud)

使用 switch 卷曲到我的服务器--http2。响应仍然显示 HTTP/1.1

curl -Iks --http2 https://myserver/reset
HTTP/1.1 502 Bad Gateway
connection: close
content-length: 0
Run Code Online (Sandbox Code Playgroud)

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

curl -Iks --http2-prior-knowledge https://myserver/reset
Run Code Online (Sandbox Code Playgroud)

如果使用 switch (verbose) 执行上述命令v,输出将包括以下行。

* http2 error: Remote peer returned unexpected data while we expected SETTINGS frame.  Perhaps, peer does not support HTTP/2 properly.
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 开关k用于insecure- 我的服务器使用自签名证书。否则不需要。
  • Switch 的I作用是发送HEAD请求并避免输出中出现噪音。
  • 以上是在 Ubuntu 18.04 上使用 curl 7.58.0 捕获的


Кон*_*кин 5

您可以使用命令

curl -vso /dev/null https://google.com 2>&1 | grep ALPN
Run Code Online (Sandbox Code Playgroud)

输出将是

 * ALPN, offering h2 // Client is offering HTTP 2 protocol
 * ALPN, offering http/1.1 // Client is also offering HTTP 1.1 protocol
 * ALPN, server accepted to use h2 // Server said that it is going to use HTTP 2 protocol
Run Code Online (Sandbox Code Playgroud)

或者

* ALPN, offering h2 // Client is offering HTTP 2 protocol
* ALPN, offering http/1.1 // Client is also offering HTTP 1.1 protocol
* ALPN, server accepted to use http/1.1 // Server said that it's going to use HTTP 1.1 protocol, even though client supports HTTP 2.0
Run Code Online (Sandbox Code Playgroud)

您可以看到解释就在 // 之后引用的输出中