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

时间:2019-01-08 12:11:33

标签: protocols http2 browser-support

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

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

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

How do I detect user navigating back in Angular2?

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

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

7 个答案:

答案 0 :(得分:40)

您可以使用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
....

答案 1 :(得分:9)

在Chrome中使用 F12 打开 Dev Tools 。然后转到网络标签。

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

Confluent

答案 2 :(得分:5)

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。

答案 3 :(得分:3)

您只需签入:Chrome开发工具>网络>协议

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

HTTP 2.0 Protocol

答案 4 :(得分:2)

打开浏览器devtools并切换到“网络”选项卡。在那里,如果http / 2可用,您将看到h2。

答案 5 :(得分:2)

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

答案 6 :(得分:0)

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

Curl 到支持 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 捕获的