0

PHPget_headers函数返回一个数组,最终包括一个字符串,如HTTP/1.1 200 OK. 我传递给函数的 URL 是https. 出于某种原因,get_headers总是有成功的响应HTTP/1.1,但是 Firefox devtools-network 标签说它是HTTP/2.

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

不幸的是,我无法为我的问题提供更好的片段。是否get_headers在幕后做某事以始终将响应显示为HTTP/1.1?有没有其他人遇到过这个?

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

任何帮助表示赞赏!

4

1 回答 1

2

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

也许尝试像 Guzzle 这样的其他 HTTP 客户端并强制使用这样的 HTTP 版本:

use GuzzleHttp\Client;

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

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

编辑:根据这篇文章Make HTTP/2 request with PHP that is not so old, PHP 仅本机支持带有 cURL 的 HTTP/2。

于 2020-10-12T09:16:32.023 回答