PHP get_headers 函数总是 HTTP/1.1

PHP get_headers function always HTTP/1.1

PHP get_headers 函数 returns 一个数组,最终包括像 HTTP/1.1 200 OK 这样的字符串。我传递给函数的 URL 是 https。由于某种原因,get_headers 的成功响应总是 HTTP/1.1,但 Firefox devtools - 网络选项卡显示它是 HTTP/2

我这样调用函数 $headers = get_headers("https://SOME_URL", 1);。 第二个参数只影响响应数组的格式。 然后像if($headers[0] == 'HTTP/1.1 200 OK') { ... }

那样处理

很遗憾,我无法为我的问题提供更好的代码段。 get_headers 是否在幕后做了一些事情以始终将响应显示为 HTTP/1.1 ?其他人 运行 参与其中了吗?

我搜索了各种帖子并阅读了一些文档,但找不到与我的问题相关的任何内容。

感谢任何帮助!

如果不代理流量,我想 get_headers 只是不支持 HTTP/2(我想所有本机 PHP 函数都不支持 HTTP/2,可能取决于在您使用的 PHP 版本上)。

也许可以尝试使用其他 HTTP 客户端(例如 Guzzle)并强制使用这样的 HTTP 版本:

use GuzzleHttp\Client;

$client = new Client();
$client->get('http://test.test', [
    'version' => 2.0,
    'debug' => true,
]);

如果服务器仍然return HTTP 版本 1.1 的响应,那么您的流量可能已被代理。如果不是,get_headers可能不支持HTTP/2。

编辑:根据这个 post 并不太老,PHP 仅原生支持 HTTP/2 和 cURL。