验证本地或远程网址是否HTTP/2站点

概论

现在越来越多的站点开始支持HTTP/2协议,那我们如何验证请求的网址是Http2.0协议的接口呢?又如何验证本地PHP环境(curl类库)是否支持Http2.0协议呢?

以下是一个验证的类以及静态方法
<?php

$a = CURL_VERSION_HTTP2;
echo 'CURL_VERSION_HTTP2:';
var_dump($a);
echo '<hr/>';
$b = CURL_HTTP_VERSION_2_0;
echo  'CURL_HTTP_VERSION_2_0:';
var_dump($b);
echo '<hr/>';

class Http2Helper 
{
	/**
	 * 测试本地或远程是否支持http2
	 * @param  string  $url 要测试的地址
	 * @return array ['code'=>'', 'msg'=>''] code==1 表示外部url支持http2
	 */
	public static function isSupportHttp2($url) 
	{
		$result = ['code' => 1, 'msg' => ''];
		$curlVersion = curl_version();
		// var_dump($curlVersion);
		if ($curlVersion['features'] && CURL_VERSION_HTTP2 !== 0) {
			 $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,
				]);

		 	$response = curl_exec($ch);

		 	//查看返回内容
		 	// var_dump($response);
		 	
			if ($response !== false && strpos($response, 'HTTP/2') === 0) {
			 	$result['msg'] =  "HTTP/2 support!"; 
			} elseif ($response !== false) {
			 	$result['msg'] = "服务器上没有HTTP/2支持。";
			 	$result['code'] = -1;
			} else {
			 	$result['msg'] = curl_error($ch);
			 	$result['code'] = -2;
			}
			curl_close($ch);
		} else {
		 	$result['msg'] = "客户端上没有HTTP/2支持。";
		 	$result['code'] = -3;
		}
		return $result;
	}
}

$begin = microtime(true);
// $url = 'https://www.zhihu.com';
$url = 'https://www.alipay.com/';
// $url = 'https://www.baidu.com/';
$retArr = Http2Helper::isSupportHttp2($url);
$end = microtime(true);
echo "function isSupportHttp2() spent time:".(($end-$begin)*1000).'ms <br/>';
var_dump($retArr);
最终返回的结果如下

结果图

从结果我们可以看到支付宝网站是一个http2.0站点,本地环境也是支持Http2.0协议的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值