在PHP中,有没有一种简单的方法来测试URL是否支持HTTP/2?我尝试检查连接升级或curl_setopt($curl, CURLOPT_HEADER, true)
中的h2,就像规范中的HTTP/2标识。有许多网站可以添加URL并告诉您该网站是否支持HTTP/2。只是想知道他们如何进行测试,是否可以在PHP中进行类似的操作。在命令行上,我可以做类似以下的操作:$ curl -vso --http2 https://www.example.com/
在PHP中,有没有一种简单的方法来测试URL是否支持HTTP/2?我尝试检查连接升级或curl_setopt($curl, CURLOPT_HEADER, true)
中的h2,就像规范中的HTTP/2标识。有许多网站可以添加URL并告诉您该网站是否支持HTTP/2。只是想知道他们如何进行测试,是否可以在PHP中进行类似的操作。在命令行上,我可以做类似以下的操作:$ curl -vso --http2 https://www.example.com/
HTTP/2.0
已经改为HTTP/2
有一段时间了。因此,您应该真正针对HTTP/2
进行检查(对于即将推出的HTTP 3,也可以使用HTTP/3
)。strpos
,您现在还可以使用str_starts_with($response, "HTTP/2")
来使用PHP 8。否则,您可以使用substr($response, 0, 6) === "HTTP/2"
用于PHP 7。curl_getinfo
现在也支持CURLINFO_HTTP_VERSION
:echo curl_getinfo($ch, CURLINFO_HTTP_VERSION);
// 3 for HTTP/2
CURLINFO_HTTP_VERSION
返回的值(截至 PHP 7.3):CURL_HTTP_VERSION_NONE === 0
CURL_HTTP_VERSION_1_0 === 1
CURL_HTTP_VERSION_1_1 === 2
CURL_HTTP_VERSION_2 === 3
CURL_HTTP_VERSION_2_0 === 3
CURL_HTTP_VERSION_2TLS === 4
CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE === 5
CURL_HTTP_VERSION_2TLS
,即HTTP/2 over TLS):if (
$response !== false
&& curl_getinfo($ch, CURLINFO_HTTP_VERSION) === CURL_HTTP_VERSION_2TLS
) {
// The connection was established using HTTP/2 over TLS
// if the server does not support TLS HTTP/1.1 will be used.
}
CURLOPT_HTTP_VERSION
参数,这将使cURL尝试进行HTTP/2.0请求。之后,您需要检查请求的头信息以确定服务器是否确实支持HTTP/2.0。
示例:
$url = "https://google.com";
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_HEADER => true,
CURLOPT_NOBODY => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_2_0, // cURL will attempt to make an HTTP/2.0 request (can downgrade to HTTP/1.1)
]);
$response = curl_exec($ch);
if ($response !== false && strpos($response, "HTTP/2.0") === 0) {
echo "Server of the URL has HTTP/2.0 support."; // yay!
} elseif ($response !== false) {
echo "Server of the URL has no HTTP/2.0 support."; // nope!
} else {
echo curl_error($ch); // something else happened causing the request to fail
}
curl_close($ch);
curl_getinfo()
来检查请求使用的HTTP版本。 - Tom Udding