编程

PHP 8.4: Curl: 新增 CURL_HTTP_VERSION_3 及 CURL_HTTP_VERSION_3ONLY 常量,以支持 HTTP/3

393 2024-11-30 01:47:00

如果 Curl 扩展是用 HTTP/3 的必要依赖项编译的,则 PHP Curl 扩展能够发出 HTTP/3(也称为 QUIC)HTTP 请求。

PHP 8.4 中的 Curl 扩展要求 libcurl 7.61.0 或更高版本。Curl HTTP/3 支持要求 libcurl 7.66.0 或更高版本。

从 PHP 8.2 及更高版本开始,可以通过向 CURLOPT_HTTP_VERSION 的 Curl 选项传递正确的参数来启用 HTTP/3 支持。

在 PHP 8.4 中,Curl 扩展声明了以下两个新的 PHP 常量,它们是 CURLOPT_HTTP_VERSION  Curl 选项的可接受参数。

  • CURL_HTTP_VERSION_3 (值为 int 30)
  • CURL_HTTP_VERSION_3ONLY (值 int 31)

请注意,PHP 8.2 及更高版本上都可以启用 HTTP/3。PHP 8.4 中唯一的区别是上述值被声明为 PHP 常量。

$ch = curl_init("https://php.watch/");
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_3);
curl_exec($ch);

如果 Curl 扩展不是使用 HTTP/3 支持编译的,curl_setopt 调用将返回 falseCURLOPT_HTTP_VERSION 选项将保持默认值或现有值(如果之前已设置)。

CURL_HTTP_VERSION_3

CURLOPT_HTTP_VERSION Curl 选项设置为 CURL_HTTP_VERSION_3时,Curl 将尝试对请求使用 HTTP/3,但如果失败,将回退到之前的 HTTP 版本。这是启用 HTTP/3 的典型和理想的方式,因为它采用了机会主义的方法来启用 HTTP/3。
CURL_HTTP_VERSION_3 常量被赋值为 int30

CURL_HTTP_VERSION_3ONLY

CURLOPT_HTTP_VERSION Curl 选项设置为 CURL_HTTP_VERSION_3ONLY 时,Curl 将尝试使用 HTTP/3,但如果主机不支持 HTTP/3,则请求将失败。
CURL_HTTP_VERSION_3ONLY 常量被赋值为 int31。.

向后兼容性影响

CURL_HTTP_VERSION_3CURL_HTTP_VERSION_3ONLY 是全局命名空间中声明的两个 PHP 常量。除非在用户空间的 PHP 应用中声明了同名常量,该更新不会导致向后兼容性问题。

在 PHP 8.2 及更高版本中,可以轻松地对这两个新常量进行 polyfill。虽然不推荐,但也可以通过直接传递这些常量的整数值来启用 HTTP/3 支持。

if (curl_version()['version'] >= 0x075800) {
    define('CURL_HTTP_VERSION_3', 30);
    define('CURL_HTTP_VERSION_3ONLY', 31);
}

 

相关推荐: